24

我正在尝试访问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);
    });
});

有人能帮助我吗?

4

4 回答 4

14

不久前有一篇关于跨域 AJAX的文章在这里发布:

带有 JSON 响应的跨域 AJAX 请求,用于 IE、Firefox、CHROME、SAFARI – JQUERY

如果您可以控制响应服务器,则处理此问题的最简单方法是为以下内容添加响应标头:

Access-Control-Allow-Origin: *

这将允许跨域 AJAX。在 PHP 中,您需要像这样修改响应:

<?php header('Access-Control-Allow-Origin: *'); ?>

您可以将 Header set Access-Control-Allow-Origin * 设置在 apache conf 或 htaccess 文件上,它就像一个魅力

重要提示:
通配符将允许任何域向您的主机发送请求。我建议将星号替换为您将在其上运行脚本的特定域。

于 2013-06-18T03:44:07.280 回答
2

Cross-Origin Resource Sharing除非education.com 服务器配置为允许CORS ( ) 请求(仅此而已) ,否则您无法使用浏览器执行此Access-Control-Allow-Origin操作。

但是,您的服务器可以代表您发出请求,然后您可以从那里检索数据。

于 2013-06-18T03:35:24.390 回答
1

在 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;
  }
于 2013-08-08T11:22:55.007 回答
0

与其说是解决问题的方法,不如说是避免问题的技巧——在没有网络安全的情况下启动浏览器:

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'

注意:切勿使用浏览器进行正常冲浪,这只是为了在紧急情况下帮助您!干杯

于 2013-09-04T10:03:07.753 回答