4

これは自明です:

while (...) {
    var string='something that changes for each ajax request.';
    $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
    // get string into here somehow.
}

ご覧のとおり、何とかstring入り込む必要があります。ajaxリクエストごとに異なるprocessDataため、グローバル変数を作成できません。stringそれで、問題は、どのようにstringajax リクエストにバインドしてからアクセスできるようにするprocessDataかということです。

クエリに追加してサーバーに返す必要は本当にありませんstringが、これが唯一のオプションである場合は、選択の余地がありません。

前もって感謝します。

4

3 に答える 3

6

この方法で試してください:

while (...) {

    var str = 'something that changes for each ajax request.';

    (function(_str) {
        $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'})
         .done(function(data) {
            processData(data, _str);
         });
    }(str));
}

function processData(data, str) {
  console.log(data, str);
}

グローバル変数は使用されていません:)

于 2012-05-22T16:15:37.347 に答える
2
var string='something that changes for each ajax request.';
// Use a closure to make sure the string value is the right one.
(function() {
    // Store the "string" context
    var that = this;
    $.ajax({
        'type': 'GET',
        'dataType': 'json',
        'url': 'get_data.php'
    }).done(
        $.proxy( processData, that )
    );
}(string));

function processData( data ) {
    this.string === 'something that changes for each ajax request.' // true
}

$.proxyの jQuery バージョン (クロスブラウザ) です.bind()

@Joelが提案したように(彼の削除された回答で)引数を追加できますが、引数が少ないほど良い.

于 2012-05-22T16:15:25.207 に答える
0
$(document).bind("ajaxSend",function(){
    $("#ajax_preloader").show();
}).bind("ajaxComplete",function(){
    $("#ajax_preloader").hide();
});
于 2016-05-17T20:07:58.800 に答える