2011-07-23 11 views
0

私は関数を呼び出してから、返された変数を取ってdiv内の画面に表示しようとしています。しかし、以下の私の現在のフォーマットでは、.html()はpostGameStatistics()関数として同時に実行されます。 postGameStatistics()は、他のアクションの中でajax投稿を行う関数です。これをチェーンする方法はありますか?パラメータを持つjqueryコールバック

 var fbDiv = "#fb-request-wrapper"; 
     var xp = postGameStatistics(fbDiv, "#loading_fb", "p2", null); 
     $(fbDiv).html("Congrats! you've just earned " + xp + " XPs."); 
     $(fbDiv).show(); 

乾杯、

ディーン

+0

'postGameStatistics'コールバックに' '$(fbDiv).htmlを(...)を実行します。 'postGameStatistics'がどのように動作するのかわからないので、これがすべてです。 –

答えて

2

つのオプション。私は第二のものが本当にあなたが望むものだと思う。

1)jQuery ajaxリクエストのオプションのasyncプロパティをfalseに設定します。これにより、スクリプトの残りの部分は、要求が完了するまで待ってから処理を進めます。例:

2)$ .ajaxメソッドの "success"コールバックで2行目の2行目のコードを実行します。これは、AJAXリクエストを処理する標準的なjQueryの方法です。あなたはこのような場合にはfalseに非同期を設定する必要はないことに注意してください:

$.ajax({ 
    url: http://example.com, 
    type: 'POST', 
    data: myData, 
    success: function(data){ 
     $(fbDiv).html("Congrats! you've just earned " + data + " XPs."); 
     $(fbDiv).show(); 
    }, 
    error: function(data){ 
     //handle a failed request 
    } 
}); 
+0

同期要求を使用することは、ほとんど常に間違ったアプローチです。 –

+0

これは同期アプローチを使用して動作します。しかし、応答メッセージをajaxに埋め込むことは意味がありますが、postGameStatistics()へのすべての呼び出しで応答メッセージを送信する必要はありません。このプロセスは常にシーケンシャルなので、同期呼び出しが最も良いと思います。思考?欠点は何ですか? – Dean

+0

あなたはさらに詳しい説明をしなければならないでしょう。あなたは、 "postGameStatistics()へのすべての呼び出しが応答メッセージを掲示する必要はないと書いています。"しかし、あなたが投稿したサンプルコードでは、これは当てはまりそうにありません。どのようなコードでも、fbDivはxpポイントに関するメッセージを表示します。ゲームの統計情報を黙って投稿している(つまり、ユーザーがそれらについて知る必要はない)場合は、単に成功のコールバックに何も入れないでください。ポスティングに何か問題が生じた場合にのみユーザーに警告する必要がある場合は、コールバックに条件付きコードを入れることができます – maxedison

0

あなたはAJAXリクエストが成功し終わった後get`sが呼ばれることに、コールバック関数に$(fbDiv).html()$(fbDiv).show()を移動することができます。あなたは、AJAX呼び出しを行うためにアヤックス()関数を使用することができますjQueryを使って

var postGameStatistics = function(div) { 
    var $div = $(div); 
    $.get('get/xp', {some: "parameters"}, function(response) { 
     var xp = response.xp; 

     $div.html("Congrats! you've just earned " + xp + " XPs."); 
     $div.show(); 
    }); 
}; 
0

だからあなたの要求は次のようになります。必要なものを実現するには、ajax()関数の下でsuccess()またはcemplete()メソッドを使用することを検討してください。 success()メソッドでは、DIV要素を塗りつぶして表示できます。

詳細はここで読むことができます:http://api.jquery.com/jQuery.ajax/

EDITを。

少し例


$.ajax({ 
    url: 'http://example.com/something', 
    action: 'post', 
    success: function(data) { 
    $(fbDiv).html("Congrats! you've just earned " + xp + " XPs."); 
    $(fbDiv).show(); 
    } 
}); 
関連する問題