在Chrome中使用XMLHttpRequest获取URL查询

GET query to URL using XMLHttpRequest in Chrome

本文关键字:获取 URL 查询 XMLHttpRequest Chrome      更新时间:2023-09-26

我正试图直接使用XMLHttpRequest检索url:

req = new XMLHttpRequest
req.onreadystatechange = -> 
  console.log req.readyState
  if req.readyState == 1
    console.log "sending..."
    req.send
  if req.readyState == 4
    handler(req.response, req.status)
req.open("GET", info.srcUrl, true)
req.responseType = "arraybuffer"

但我从未看到对象转换到1 readyState之外。我错过了什么?

如果您试图从接收运行脚本的服务器以外的其他源检索任意资源,则很可能会遇到与跨站点脚本相关的安全问题。

除非在非常有限的情况下,您不能从任何其他网站检索资源,除非是为您当前查看的页面提供服务的网站。

有关说明,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript?redirectlocale=en-美国&重定向段塞=JavaScript%2FSame_origin_policy_for_JavaScript

对于我上面提到的有限情况,请参阅https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-美国&重定向段塞=HTTP_access_control

此外,由于您似乎没有为XMLHTTPRequest提供错误处理程序,您很可能会错过错误消息,该消息会通知您请求失败的原因。

更新

关于XMLHTTPRequest的快速教程,包括如何处理onError事件,可以在https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-美国&redirectslug=DOM%2FXMLHttpRequest%2Using_XMLHttpRequest

来自Ruby,我没有意识到req.sendreq.send()之间有一个微妙但重要的区别。正如@RobW在评论中指出的那样,这个方法也不应该在事件处理程序中调用,而应该在代码的末尾调用。