0

データとステータスの値を変数に保存し、jquery GET/POST 関数の閉じ括弧の後に使用したいのですが、.get 括弧内にある場合にのみアラートが発生します。

$(document).ready(function(){
    $.get("demo_test.asp",function(data,status){
         v = data;
     });
 alert("Data:"+v);
 });
4

3 に答える 3

1

ジャスパーが言っalertたように、リクエストが完了する前にトリガーされています(非同期!)。したがって、次の 2 つのオプションがあります。

コールバック内でロジックを実行します。

$.get("demo_test.asp",function(data,status){
     v = data;
     alert("Data:"+v);
     //Process stuff here
});

または、受信dataしたものを別の関数に渡し、そこで処理します

$.get("demo_test.asp",function(data,status){
     v = data;
     doStuff(v);
});

function doStuff(param) {
    console.log(param);
}
于 2013-09-27T16:12:04.720 に答える
0

あなたは絶対に正しいです。コードは正常に機能しています...理由は次のとおりです。

ページがロードされてコードの実行が開始され、.get コマンドが実行されて実行が継続され、明らかに次の「アラート」に到達します。.get 関数は、ページが「アラート」部分に到達する前にデータの取得にまだ取り組んでいるため、プロンプトを表示するものは何もありません。

遅延オブジェクトを使用して、.get の後に物事をつなぎ合わせたい場合があります。調べてください:http://api.jquery.com/deferred.always/

これは、データをフェッチする関数の別の関数に追加する方法であるため、相互に依存しています。

于 2013-09-27T16:14:12.973 に答える
0

簡単な答えです。はい、データをグローバル変数に保存して、他の場所にアクセスできます。ただし、準備が整うまで待つ必要があります。

これを行うためのより良い方法は、代わりに jqXHR をグローバルに保存し、データにアクセスする必要があるときに完了コールバックを追加することです。

var reqDemoTest = $.get(...);
//... some time later...
reqDemoTest.done(function(data){
    console.log(data);
});
于 2013-09-27T17:23:00.633 に答える