web-dev-qa-db-ja.com

XMLHttpRequestをロードできませんは、Access-Control-Allow-Originでは許可されていません

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 。 OriginはAccess-Control-Allow-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);
    });
});

誰かが私を助けてくれますか?

21
user2495586

Cross Domain AJAXに関する記事はしばらくここに戻ってきました:

クロスドメインAJAX IE、FIREFOX、CHROME、SAFARIのJSONレスポンスのリクエスト– JQUERY =

応答サーバーを制御している場合にこれを処理する最も簡単な方法は、次の応答ヘッダーを追加することです。

Access-Control-Allow-Origin: *

これにより、クロスドメインAJAXが許可されます。 PHPでは、応答を次のように変更します。

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

ヘッダーセットAccess-Control-Allow-Origin * Apacheのconfまたはhtaccessファイルに設定するだけで、チャームのように機能します。

重要な注意:
ワイルドカードにより、どのドメインでもホストにリクエストを送信できます。アスタリスクを、スクリプトを実行する特定のドメインに置き換えることをお勧めします。

15
SALMAN

Education.comサーバーがCORS(Cross-Origin Resource Sharing)リクエスト(つまり、Access-Control-Allow-Originビット)。

ただし、サーバーがユーザーに代わってリクエストを行うことができ、その後そこからデータを取得できます。

2
user1864610

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;
  }
1
YumYumYum

問題に対するそれほど多くの解決策ではありませんが、問題を回避するためのハック-Webセキュリティなしでブラウザを起動します。

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'

注:通常のサーフィンにはブラウザを使用しないでください。これは、緊急の場合に使用できるようにするためです。乾杯

0