繁体   English   中英

向另一台服务器发出AJAX请求

[英]Making an AJAX request to another server

我有AJAX代码,如果你请求对远程服务器的AJAX调用请求失败:

function loadXMLDoc() {
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
    }
  }

  xmlhttp.open("GET", "http://www.google.com", true);
  xmlhttp.send();
}

我该怎么做才能解决这个问题?

看起来你已经碰到了同样的原产地政策 您必须使用相对路径而不是绝对的http://www.google.com路径。

作为一种可能的解决方法,您可以设置一个非常简单的反向代理 (如果您使用的是Apache,则使用mod_proxy )。 这将允许您在AJAX请求中使用相对路径,而HTTP服务器将充当任何“远程”位置的代理。

在mod_proxy中设置反向代理的基本配置指令是ProxyPass。 您通常会按如下方式使用它:

ProxyPass     /web-services/     http://third-party.com/web-services/

在这种情况下,浏览器将请求/web-services/service.xml但服务器将通过充当http://third-party.com/web-services/service.xml的代理来提供此服务。

另一个常见的解决方法是使用JSONP

作为安全措施,AJAX不允许您向其他域发出请求。 跨域Ajax:快速摘要讨论了解决该问题的几种方法。 最简单的方法是使用您的服务器作为代理来下载远程内容:

这是最常见的方法之一。 您的脚本调用您的服务器,您的服务器调用远程服务器,然后将结果返回给客户端。 这种方法有一些明显的优势:您可以更好地控制整个生命周期。 您可以从远程服务器解析数据,在将数据发送回客户端之前将其与您的数据进行对比。 如果在此过程中出现任何问题,您可以按照自己的方式处理。 最后,您可以记录所有远程呼叫。 这样你就可以追踪成功,失败和受欢迎程度。

我想在最佳答案上发布另一个变体。 我试图在我的.htaccess文件中使用ProxyPass ,但我一直收到内部服务错误。 经过一些阅读后,我发现还有另一种方法可以使用重写引擎。

RewriteEngine On
RewriteRule ^mail.php$ http://otherwebsite.com/mail.php [P,L]

[P,L]中的[P,L]告诉重写系统它使用mod_proxy 这对我有用,我没有得到内部服务器错误。

这种方法的优点是,因为它使用了Rewrite Engine ,所以您可以更好地控制动态发送到脚本所需的变量。

您可以使用动态脚本加载 这是我写的关于它的文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM