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 ?

Đổ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.

2 Likes

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.

1 Like

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

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ũ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?