[英]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.