Access-Control-Allow-Origin 不允许 XMLHttpRequest 无法加载
Posted
技术标签:
【中文标题】Access-Control-Allow-Origin 不允许 XMLHttpRequest 无法加载【英文标题】:XMLHttpRequest cannot load is not allowed by Access-Control-Allow-Origin 【发布时间】:2013-06-14 03:32:50 【问题描述】:我正在尝试访问 education.com API 数据。但是,我不断收到错误状态的错误消息:
XMLHttpRequest 无法加载 http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json。 Access-Control-Allow-Origin 不允许 Origin。
我的代码如下:
$(function()
$.getJSON('http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json',
function(data)
console.log(data);
);
);
有人可以帮帮我吗?
【问题讨论】:
该api是否接受jsonp回调参数?目前似乎没有。如果没有,您不能单独使用浏览器请求它。 这个很全面3 simple solutions 尝试跨域...检查pureexample.com/jquery/cross-domain-ajax.html 【参考方案1】:一篇关于Cross Domain AJAX的文章不久前在这里发布:
CROSS DOMAIN AJAX REQUEST WITH JSON RESPONSE FOR IE,FIREFOX,CHROME, SAFARI – JQUERY
如果您可以控制响应服务器,处理此问题的最简单方法是为以下内容添加响应标头:
Access-Control-Allow-Origin: *
这将允许跨域 AJAX。在 PHP 中,您需要像这样修改响应:
<?php header('Access-Control-Allow-Origin: *'); ?>
您可以将 Header 设置 Access-Control-Allow-Origin * 设置在 apache conf 或 htaccess 文件中,它就像一个魅力一样工作
重要提示: 通配符将允许任何域向您的主机发送请求。我建议将星号替换为您将在其上运行脚本的特定域。
【讨论】:
不幸的是,我无法控制响应服务器。 ://【参考方案2】:除非education.com 服务器配置为允许CORS (Cross-Origin Resource Sharing
) 请求(即Access-Control-Allow-Origin
位),否则您无法使用浏览器执行此操作。
但是,您的服务器可以代表您发出请求,然后您可以从那里检索数据。
【讨论】:
【参考方案3】:在ZF1中可以做如下:
public function indexAction()
$turnkey = array(
"uris" => array("176.x.x:3478", "3478"),
"username" => "my_username",
"password" => "my_password"
);
$content = Zend_Json::encode($turnkey);
$this->getResponse()
->setHeader('Access-Control-Allow-Origin', "*")
->setHeader('Content-Type', 'application/json')
->setBody($content)
->sendResponse();
exit;
【讨论】:
【参考方案4】:与其说是解决问题的方法,不如说是避免问题的技巧——在没有网络安全的情况下启动浏览器:
in MacOS this would work as follows: cd to ../../Applications/Google\ Chrome.app/Contents/MacOS
then start the brwoser with the appropiate flag: Google\ Chrome --disable-web-security'
注意:切勿使用浏览器进行正常上网,这只是为了在紧急情况下帮助您! 干杯
【讨论】:
在 Linux 中运行google-chrome --disable-web-security
并不能解决这个问题。如果这真的适用于 Mac,我会感到惊讶......以上是关于Access-Control-Allow-Origin 不允许 XMLHttpRequest 无法加载的主要内容,如果未能解决你的问题,请参考以下文章