3

次のjQuery呼び出しを使用して、サーバーに Ajax 呼び出しを実行しようとしています。

$.ajax({
    type: "GET",
    dataType: "jsonp",
    url: "http://iceworld.sls-atl.com/api/&cmd=time",
    success: function (data) {
        console.log("success");
        console.log(data);
    },
    error: function (error) {
        console.log("error");
        console.log(error);
    },
});

ブラウザから期待どおりのデータを取得しますが、Firebug は以下に示すように「SyntaxError: 無効なラベル」と言い続けます。

無効なラベル

それで、私を困惑させているのは、成功ではなくエラーコールバックが呼び出される理由です。私はここで何が間違っていたのだろうかと思っています。

4

3 に答える 3

7

JSONP データは次の形式で返される必要があります: callback( jsonObject ). そのため、invalid labelエラーが発生しています。JSON オブジェクトではなく、関数が必要です。サーバー コードを変更して、戻り値をコールバック関数の名前でラップする必要があります。JSONP をリクエストすると、jQuery によって自動的に名前がリクエストに追加されます。リクエストを見ると、次のように表示されます。

http://iceworld.sls-atl.com/api/&cmd=time?callback=jQuery191035087670385837555_1365126604422&_=1365126604423

スクリプトはcallbackパラメーターを取得し、それを使用してデータをラップする必要があるため、この例では次のようになります。

jQuery191035087670385837555_1365126604422({"status":1,"data":"1365126534"})

同じオリジンからサーバーにアクセスしている場合は、代わりに JSON を使用できます。

于 2013-04-05T01:56:28.670 に答える
1

詳細がなく、サーバーから送信された応答がなければ、明確に回答することは困難です。しかし、これを見ると、サーバーが有効な JSON を返しているように見えます。JSONP ラッパー関数ではありません。to を変更してみてくださいdataTypeJSONただし、約束はありませんが、確認するにはさらに情報が必要です

于 2013-04-05T01:45:21.623 に答える