Access-Control-Allow-Origin不允许加载XMLHttpRequest

时间:2013-06-18 03:27:04

标签: javascript jquery json api getjson

我正在尝试访问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 个答案:

答案 0 :(得分:15)

关于跨域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: *'); ?>

你可以在Heache conf或htaccess文件中设置Header set Access-Control-Allow-Origin *设置它就像魅力一样

  

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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;
  }

答案 3 :(得分: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'

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