0

jsonp リクエストを次のように送信しています。

var jsoncallback = "?jsoncallback=?"
$.getJSON( reportURL + jsoncallback, {
    tags: "",
    tagmode: "any",
    format: "json"
    })
    .done(function( data ) {
        $.each( data.items, function( i, item ) {
          alert( item );
        });
    });

リクエストが機能するかどうかを確認するためにアラートを出しました。サーバー側では、ノード js ファイルで、次のようにリクエストに応答しています。

..
console.log("request received");
response.writeHead( 200, { "Content-Type": "application/json" } );
..
response.end();

ログで、リクエストが受信されたことがわかります。問題は、警告ウィンドウがポップアップしないことです。

この理由は何でしょうか?

4

2 に答える 2

1

私はちょうど reponse.writeHead(...) と (テスト上の理由から - 頭と終わりだけ) response.end()

URL にが含まれている場合、jQuery は応答としてjsoncallback=?JSONP を期待しています。<script>これが機能するためには、サーバーは少なくとも「パディング」を書き出す必要があります。

これは、 という名前の関数の呼び出しjsoncallbackです。そしてそれはただではありません?- jQuery はそれを の行に沿って疑似乱数関数名に置き換えますjQuery1910123456789_0123456789。そのためには、応答は少なくとも次のようにする必要があります。

jQuery1910123456789_0123456789();

から値を取得する必要がありますrequest.url

var parsedUrl = url.parse(request.url, true);
var query = parsedUrl.query || {};

if ('jsoncallback' in query) {
    response.write(query.jsoncallback + '();');
}
// ...

そして、dataそれを出力する必要がある場合:

if ('jsoncallback' in query) {
    response.write(query.jsoncallback + '(' + JSON.stringify(data) + ');');
} else {
    response.write(JSON.stringify(data));
}
于 2013-03-23T23:19:40.193 に答える
0

JSON が正しくフォーマットされていることを確認しましたか? http://jsonlint.com/と照らし合わせて確認してください。

getJSON() ドキュメントから:

jQuery 1.4 の時点で、JSON ファイルに構文エラーが含まれている場合、通常、リクエストは暗黙のうちに失敗します。

于 2013-03-23T22:34:20.857 に答える