2

$.get によって返されたデータを alert() しようとしている、またはより正確に var データに割り当てようとしています

var data = [];
function outside(text) {
data.push(text);
}

$.get( "../../services/content/test.php", function( content ) {
 outside(content);

});
alert(data); 
4

4 に答える 4

2

Ajaxalertリクエストから結果を取得する前に呼び出されます。alertinコールバックを実行$.getすると、出力が利用可能になるため、次のようになります。

$.get( "../../services/content/test.php", function( content ) {
 outside(content);
 alert(data);
});

これは、非同期リクエストの通常の動作です。

于 2013-09-19T08:54:46.470 に答える
0

Ajax 呼び出しは非同期であるため、アラートを出したときにデータに値が含まれているという保証はありません。コールバックでデータをアラートしてみてください。

var data = [];
function outside(text) {
data.push(text);
}

$.get( "../../services/content/test.php", function( content ) {
 outside(content);
 alert(data); 
});

現在、コードは次のように実行されます。

var data = [];
function outside(text) {
    data.push(text); //4. result is pushed to array.
}

//1.  Ajax call is made
$.get( "../../services/content/test.php", function( content ) {
 outside(content); //3.  Ajax call returns and outside function is called
});
//2.  data is alerted
alert(data);

Ajax レスポンスがアレイにプッシュされる前に、アレイにアラートが送信されていることがわかります。

于 2013-09-19T08:55:53.197 に答える
0

これを試して、

 var data = [];
 function outside(text) {
  data.push(text);
  alert(data); 
 }

 $.get( "../../services/content/test.php", function( content ) {
  outside(content);

 });

$.get は非同期であることを意味し、ブラウザは次の行の実行が完了するまで待機しません

于 2013-09-19T08:56:17.990 に答える
0

デフォルトでは、jQuery はサーバーへの非同期呼び出しを実行し、引数として渡したコールバック関数に結果を送信します。dataこれにより、サーバーがリクエストに応答し、コンテンツが変数にプッシュされる前に、アラートが発生します。

もう 1 つ考えるべきことは、関数に不要なラッパー関数を作成することですoutsideoutsideが一般的な関数ではなく、その方法でのみ使用するための固有の場合は、ラップする必要はありません。単純に 2 番目の引数として渡します。

var data = [];
function outside(text) {
  data.push(text);
  alert(data);
}
$.get( "../../services/content/test.php", outside);
于 2013-09-19T09:00:03.850 に答える