9

jsonp と jquery に問題があります。

これは私のコードです -

var myCallback = function(data) {
  console.log(data);
};

$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: 'myCallback'
});

jQuery は my_url のようなものを追加?callback=myCallback&_=1340513330866し、my_url から返されるデータはmyCallback('abcd')- 実際にはabcd.

問題:abcdからコンソールにログインしていませんmyCallback。それで、私は何を間違っていますか?返されたデータは script タグ内にあるので実行されるという印象を受けましたか?

4

4 に答える 4

18

独自の関数を使用する場合は、グローバルとして明示的に宣言する必要があります。例えば:

window.myCallback = function(data) {
  console.log(data);
};

デモ


説明

成功した JSONP リクエストに応答して呼び出されるすべての関数は、グローバルである必要があります。jQueryもこれを行っています。これは、JSONP が (ほとんどの場合動的に生成された) タグ付きの JavaScript ファイルをインクルードすることに他ならないためです<script>。タグには関数呼び出しのみが含まれます。各スクリプトはグローバル スコープで評価されるため、呼び出される関数もグローバルである必要があります。

于 2012-06-24T05:32:33.573 に答える
0

なぜ単純ではないのですか?

$.getJSON(my_url, myCallback);

これは関数のスコープを処理し、はるかに単純に見えます

于 2012-06-24T06:23:43.863 に答える
0

呼び出されたメソッドから一重引用符を削除してください. これでうまくいきます. ここでコードを確認してください.

var myCallback = function(data) {
      console.log(data);
    };

$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: myCallback
});

このフィドルを試してください

于 2012-06-24T04:53:29.197 に答える