2

次のコードがあります

function exista(word) {
    alert(word);
    var exists = 1;
    jQuery.ajax({
        async: false, 
        url: "http://api.wordreference.com/0.8/key/json/roen/" + word,
        dataType: 'json',
        method: "GET",
        success: function(transport) {
            if (transport.Error || transport.Response)
                exists = 0;
        }

    });
    return exists;
}

単語が辞書に存在するかどうかを検証します。問題は、Access-Control-Allow-Origin エラーが発生することです。私が集めたものからは、JSONP を使用する必要があるようですが、実際にはその方法がわかりません (申し訳ありませんが、JavaScript などを学び始めたばかりです)。では、上記のコードを変更する方法について何か考えはありますか?

ありがとうございました。

4

2 に答える 2

3

「 json 」ではなく、「」にするdataType必要がありますjsonp

アップデート

http://www.wordreference.com/docs/api.aspxによると:

さらに、JSPONp の場合、JSON API はクエリ文字列でオプションのコールバック関数を取ることができます。URL の末尾に「?callback={yourCallback}」を追加するだけです。

そのため、API は JSONP をサポートしています。

また、JSONP は「パディング付きの JSON」を意味するため、JSON レスポンスが返されます。JSONP はCORSの使用を許可するだけです。

に変更することdataTypeによりjsonp

"jsonp": JSONP を使用して JSON ブロックに読み込みます。「?callback=?」を追加します。URL の末尾に追加して、コールバックを指定します。キャッシュ オプションが true に設定されていない限り、クエリ文字列パラメーター "_=[TIMESTAMP]" を URL に追加してキャッシュを無効にします。

設定で指定することにより、デフォルトのコールバックをオーバーライドできますjsonpCallback

最後に、エラー ハンドラを追加して、次のように設定する必要がありasyncますtrue

jQuery.ajax({
    "async": true, //cannot be false for JSONP
    "url": "http://api.wordreference.com/0.8/key/json/roen/" + word,
    "dataType": 'jsonp',
    "method": "GET",
    "error": function (jqXHR, textStatus, errorThrown) {
        //included so you can see any errors
        console.log(textStatus + ': ' + errorThrown);
    },
    "success": function (data, textStatus, jqXHR) {
        //According to API documentation
        //data will not likely contain either Error, or Response
        //so, exists will likely not change to 0
        if (data.Error || data.Response) {
            exists = 0;
        }
    }
});

アップデート:

エラーと「同期が必要」の両方に対する解決策は、先にPointyが指摘したことになります。スクリプトと同じドメインで実行されるサーバー側プロキシを作成する必要があります。

サーバー側のプロキシは JSONP を返すことができますが、率直に言って、 CORSは問題ではなく、プロキシは同期できるため、単純に JSON または XML を返す方が簡単です。PHP サンプル スクリプトについては、Yahoo! Developer Networkは、単純なプロキシのソース コードをホストしています。

サーバー側の Web サービス プロキシに関するその他のことについては、使用しているサーバー言語を指定する必要があります (おそらく別の質問として適しているでしょう)。

于 2013-01-13T15:55:25.463 に答える
0

JSONP が機能するためには、自分でコーディングする必要があるだけでなく、ターゲットとするサイトもそのように使用されることを期待し、それに応じてリクエストに応答する必要があります。

他のサイトにまだ JSONP API がなく、それを制御できない場合、JSONP は解決策ではありません。独自のサーバー側プロキシを作成する必要があります。

編集— サイトによると、JSONP をサポートしています。「?callback=?」を追加するだけです。URLの最後まで。

于 2013-01-13T15:55:18.380 に答える