2

PHPで簡単なAPIを作りました。この API は、json_encode を使用してオブジェクトをエコーし​​ます。

例:

echo json_encode($obj);

この API から情報を取得するために jQuery を使用しています。スクリプトと API をテストすると、両方が同じサーバー上で実行されます。そして、すべてがうまくいきました。

jQuery の例:

$.ajax({

    url: "php/api/test.php"
    dataType: "json",
    type: "POST",
    succes: function(data) {
        console.log("success");
    },
    error: function(response) {
        console.log("error");
    }
});

これでうまくいきました。ただし、API が外部サーバーで実行されているため、これは機能しなくなりました (はい、URL を正しいものに変更しました)。

jQuery が最終的に API から情報を受け取る前に、JSONP を使用するために API と JavaScript を変更する必要がありました。

私のjQueryは次のとおりです。

$.ajax({

    url: "http://externalserver/php/api/test.php"
    dataType: "jsonp",
    type: "POST",
    succes: function(data) {
        console.log("success");
    },
    error: function(response) {
        console.log("error");
    }
});

PHP は、動作するためにこれを返します。

echo $_REQUEST['callback'] . '(' . json_encode($obj) . ')';

実際には、JSONP の代わりに JSON を使用したいと考えています。

API が私のような外部スクリプトからの着信要求を受け入れるようにするには、PHP ファイルを変更する必要があることを理解しました。

私がしなければならないことを教えてもらえますか?

4

2 に答える 2

4

私の知る限り、AJAX リクエストのクロスドメインの問題に直面しています。この問題に対する最も簡単で最もクロスブラウザーな修正は、JSONP を使用することです。PHP スクリプトでこの問題を解決できる決定的なものはありません。これは、部分的にクライアントに依存しているためです。クロスドメイン禁止を無効にする方法を知っている人は多くありません。テスト目的で、ブラウザのセキュリティを無効にすることを検討してください。

正直なところ、JSONP を使用するだけで、多くの頭痛の種から解放されます。すでに jQuery を使用している場合は、その最高の機能 (クロスドメイン機能) を使用することもできます。
jQuery を捨てることを計画している場合は、CORS リクエストが伴うものを読んでください。

于 2013-05-13T09:15:18.857 に答える