0

関数のjQuery実行順序に問題があるか、おそらく理解が不足してい$.get()ます。関数で使用するためにデータベースサーバーからいくつかの情報を取得したいと思います$.ready()。ご存知のとおり、getが戻ると、データを処理するreturnハンドラーにデータが渡されます。私の場合、readyハンドラー関数内で宣言された変数にいくつかの値を割り当てたいと思います。ただし、問題は、readyが終了するまでのリターンハンドラーが$.get()実行されないことです。(a)私はこれを正しく行っているのか/より良い方法があるのか​​、または(b)これを回避する方法があるのか​​(つまり、get returnハンドラーをすぐに実行するように強制するのか、それとも私が知らない他の修正があるのか​​)疑問に思っていましたの)。これは私がJavaScriptについて得ていないいくつかの閉鎖的なことだと感じています。

リクエストに応じて、私が意味する例を投稿します。

$(function() {
    var userID;

    $.get(uri, function(returnData) {
                   var parsedData = JSON.parse(returnData);
                   userID = parsedData.userID;
               });
  });

ご覧のとおり、変数の準備ができていると宣言しています。次に、データベースへのget呼び出しを使用して、必要なデータを取得します。次に、返されたJSONを解析し、前に宣言された変数にuserIDを割り当てます。いくつかのアラートでテストしました。get後のアラートはuserIDを未定義として表示しますが、getのreturnハンドラーのアラートはそれが割り当てられていることを示します。

4

5 に答える 5

3

$ .get()は非同期です。変数を埋めるためにコールバックを使用し、リクエストが完了した後に計算を行う必要があります。何かのようなもの:

$(document).ready(function(){

    $.get( "yourUrl", function( data, textStatus, jqXHR ) {
        var myData = data; // data contains the response content
        // perform your processing here...
        registerHandlers( myData ); // you can only pass "data" off course...
    });

});

// your function to register the handlers as you said you need to.
function registerHandlers( data ) {
    // registering handlers...
}
于 2012-07-23T16:04:07.003 に答える
3

$.getajaxリクエストです。AJAXのAは非同期を表すため、スクリプトはこのリクエストが終了するのを待たずに、コードをさらに進めます。

完全なコールバックを使用するか、$。ajaxを使用して同期リクエストを実行するように設定asyncすることができます。false

于 2012-07-23T16:04:11.537 に答える
1

$ .get()関数は非同期httprequestを実行するため、このリクエストが何かを返すたびにコールバック関数が実行されます。このコールバックは$.ready()の外部で処理する必要があります

たぶん、あなたが何をしたいのかを正確に説明すれば、手助けするのは簡単でしょう!

于 2012-07-23T16:04:01.270 に答える
0

次のようなものをお探しですか?

$(document).ready(function(){
    var variable1, variable 2;
    $.get('mydata.url', function(data){
        variable1 = data.mydata1;
        variable2 = data.mydata2;
    });
});

最初に変数を宣言すると、get呼び出し内で変数の値を設定できます。getハンドラーの最後に関数呼び出しを追加して、これらの値を使用して別の関数を呼び出すことができますか?ある種の例がなければ、これ以上詳細に立ち入るのは難しい。

于 2012-07-23T16:06:54.373 に答える
0

完全なコードを見ずに、私の推測では、変数を外部 $.readyで宣言する必要があります。ready最初のページ読み込みのために初期化します。get次に、コールバックハンドラー から更新します。

例えば

var x = ""; // declaration

$(document).ready(function() { x = "initial value"; });

$.get(...).success(function() { x = "updated from ajax"; });
于 2012-07-23T16:08:50.723 に答える