Firefox 设置启用跨域 Ajax 请求
如果您只是不想在应用程序的开发和测试期间将时间浪费在跨域问题上,您可以使用插件Force CORS for FF。
更新:这个插件似乎不再存在。但还有另一种选择 - 这个Chrome 扩展
对于现代浏览器,您可以尝试以下方法:
https://developer.mozilla.org/en/HTTP_access_control
简而言之,您需要将以下内容添加到SERVER
响应头中(以下内容允许从 访问foo.example
):
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000
请注意,这X-PINGOTHER
是由 JavaScript 插入的自定义标头,应该因站点而异。
如果您希望任何站点在 Ajax 中访问您的服务器,请*
改用。
编辑:
当我在2009 年第一次回答这个问题时,我实际上遇到了同样的问题,我使用服务器端配置解决了这个问题。
那时 FF 或 Chrome 上还没有插件。
但是,现在我们确实有使用浏览器端插件的替代方案,请检查答案 tsds
您是否尝试过使用 jQuery 的ajax请求?从 1.3 版开始,jQuery 支持某些类型的跨域 ajax 请求。
引用上面的参考资料:
注意:当 'script' 或 'jsonp' 是 dataType 时,所有远程(不在同一个域中)请求都应该指定为 GET(因为它使用 DOM 脚本标签加载脚本)。需要 XMLHttpRequest 对象的 Ajax 选项不适用于这些请求。complete 和 success 函数在完成时被调用,但不接收 XHR 对象;不调用 beforeSend 和 dataFilter 函数。
从 jQuery 1.2 开始,如果指定 JSONP 回调,则可以加载位于另一个域上的 JSON 数据,这可以像这样完成:“myurl?callback=?”。jQuery 自动替换 ? 使用正确的方法名称调用,调用您指定的回调。或者,如果您将 dataType 设置为“jsonp”,一个回调将自动添加到您的 Ajax 请求中。
事情就是这样,没有办法“暂时”禁用跨域 XMLHttpRequest,如果您可以暂时禁用它,那么它可以永久禁用。这是现代 AJAX 编程中相当普遍的问题,并且最常使用称为跨域脚本的技术来解决。
这里的想法是,如果您调用跨域脚本,它会返回 JavaScript (JSON) 结果,然后将这些结果传递给您端的函数。
下面是一些示例代码,从 JavaScript 代码的角度说明它的外观:
function request_some_data() {
var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc";
try {
try{
document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>");
}
catch(e){
var x = document.createElement("script");
x.src = s;
document.getElementsByTagName("head")[0].appendChild(x);
}
}
catch (e) {
alert(e.message);
}
}
然后,您将在您的代码中定义一个接收数据的函数,并在您“处理”回调情况的服务器中定义一个函数,这里是客户端 JavaScript:
function myfunc(data) {
alert(data);
}
在服务器端,这里我给出了一个 PHP 示例,但这可以在 Java 或任何服务器端技术中轻松完成:
<?php
if($_GET["callback"]) {
print($_GET["callback"] . "(");
}
/* place your JSON object code/logic here */
if($_GET["callback"]) {
print(");");
}
?>
请注意,您在服务器端生成的最终是一些在客户端执行的 JavaScript。
我也试过使用“UniversalBrowswerRead”这个东西,但没有用。您也许可以添加一个“允许”标头,但我还没有真正尝试过这样做。它很新。
你可以在这里找到更多信息