ajax请求到不同的主机

时间:2009-12-19 14:41:22

标签: javascript ajax

我的网页上有以下javascript:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.google.com', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    alert('resp received, status:' + xhr.status + ', responseText: ' + xhr.responseText);
  }                                                                       
};                                                                        
xhr.send(null);                                                           

执行并完成w / readyState为4,状态为0,空responseText和responseXML。我知道它实际上是发送请求b / c我尝试将xhr发送到我的机器上的服务器,而服务器实际上确实做出了响应。为什么我在responseText中没有得到任何东西?它是否有事情要做xhr要去另一台服务器的事实?

当我打开js调试器并输入'xhr'来检查对象时我得到了这个:

  

的XMLHttpRequest
  完成:4
  HEADERS_RECEIVED:2
  加载:3
  开放时间:1
  UNSENT:0
  abort:function abort(){
  addEventListener:function addEventListener(){
  dispatchEvent:function dispatchEvent(){
  getAllResponseHeaders:function getAllResponseHeaders(){
  getResponseHeader:function getResponseHeader(){
  onabort:null
  onerror:null
  onload:null
  onloadstart:null
  onprogress:null
  onreadystatechange:function(){
  open:function open(){
  overrideMimeType:function overrideMimeType(){
  readyState:4
  removeEventListener:function removeEventListener(){
  responseText:“”
  responseXML:null
  发送:function send(){
  setRequestHeader:function setRequestHeader(){
  状态:0
  statusText:“”
  上传:XMLHttpRequestUpload
  withCredentials:false

4 个答案:

答案 0 :(得分:16)

  

它有什么事可做吗?   事实上,xhr将会发生变化   不同的服务器?

是的,您无法通过AJAX向其他服务器发送请求。然而,您可以从服务器端发送您的请求。因此,您需要实现以下工作流程: 您的页面 - >您的服务器 - >第三方服务器 - >您的服务器 - >您的页面,“ - >”意味着发送数据。

答案 1 :(得分:2)

跨站点脚本是将代码注入其他人的网页的常用方法。为了限制这一点,大多数浏览器现在都阻止客户端开发人员创建JavaScript请求(通常通过XMLHttpRequest)到位于与原始页面不同的域的网页。

您可以通过在您的域上创建一个虚拟脚本来解决此问题,该脚本将相同的请求转发到您实际需要的页面。例如,在您的情况下,您会创建一个http://mydomain.com/google.php(或您喜欢的任何脚本语言)的请求,然后使用file_get_contents或类似内容下载Google页面,只需echo它进行。

答案 2 :(得分:1)

您无法使用javascript执行跨域请求。解决此问题的最佳方法是将您的服务器用作代理。

答案 3 :(得分:1)

如果服务器配置为允许,您可以执行跨域请求:请参阅How does Access-Control-Allow-Origin header work?并google了解Access-Control-Allow-Origin标头。