01/10/2018, 11:42

Hỏi về fetch trong javascript?

fetch("http://tratu.soha.vn/dict/en_vn/Manipulate", myInit).then(function(response){
	return response.text();
	}).then(function(response){
	 console.log(respone);
}).catch(function(err){
	console.log("lỗi "+ err);

});

em viết như này để get html từ một đường link mà nó bị block ?

Mai Anh Dũng viết 13:53 ngày 01/10/2018

Đổi thành https đi.

https://tratu.soha.vn/dict/en_vn/Manipulate

Mà hình như tratu không có cho Cross Origin Request Sharing nên có đổi thành HTTPS chỉ giải quyết được một lỗi, cuối cùng vẫn không request được.

viết 13:45 ngày 01/10/2018

Block thế nào thì phải nói, k post lỗi thì giống như đi bệnh viện bảo e bị đau, mà k biết đau chỗ nào.

Hầu như chạy ajax bằng JS từ browser đều bị lỗi CORS hết (Not allowed…). Rõ ràng query từ trang của người khác thì bạn không thể whilist domain của bạn được nên cách giải quyết là

  • Mở console ngay tại trang muốn chạy fetch (như trường hợp này là tratu.soha.vn) rồi gõ code thôi
  • Developer tool của Chrome, có cái gọi là Snippets, ở tab Sources, viết code vào đó cũng đc.

Nếu muốn chạy riêng 1 file .js khác thì có thể dùng 1 trong các cách sau

  • Dùng chrome extension, viết 1 extension.
  • Nodejs, đăng ký cloud9 ide free
  • Google App Script (GAS), ngôn ngữ của GAS tương đối giống JS, khác không nhiều.
  • Hoặc đổi sang ngôn ngữ khác.

Fetch hay XMLHttpRequest, thì cũng đều gặp vấn đề này nhé, bởi lẽ 2 cái đó chỉ là công cụ để thực thi request, còn bản chất bị block là do môi trường nên bạn có dùng Ajax của jQuery hay libs khác thì cũng thế thôi. Vậy nên mình mới giới thiệu các phương án tiếp cận ở trên.

inoshu viết 13:44 ngày 01/10/2018

em cảm ơn em hiểu rồi tks anh

viết 13:47 ngày 01/10/2018

fetch có tùy chọn cho phép query cross domain luôn


fetch('https://google.com', {
  mode: 'no-cors'
}).then(v=>console.log(v))

Bạn chạy đoạn code trên dưới console nó cũng trả về kết quả đấy, trong khi bỏ cái no-cors thì bị block như cũ.

Bài liên quan
0