Передача обратного вызова и других параметров в JQuery Ajax успеха? - PullRequest
1 голос
/ 22 декабря 2011

Я написал функцию, которой разрешаю передавать обратный вызов. Затем я хочу выполнить это как с ответом ajax, так и с другим параметром.

Моя проблема в том, что обратный вызов выполняется, и когда я выполняю шаг по коду, похоже, что функция вызывается с правильными параметрами, однако при фактическом переходе к функции обратного вызова первый параметр принимает значение любого Я назначаю второй аргумент, а второй аргумент - undefined.

Вот моя функция:

namespace = {
fetch : function(sr, count, callback) {
    srCount = count ? count : '25'
    var sub;
    if (sr == 'frontpage'){
        sub = '';
    }else{
        sub = 'foo/' + sr + '/';
    };
    $.ajax({
        url: "http://www.example.com/"+sub+ ".json?count=" + count,
        dataType: "json",
        success: function(msg)
        {
            callback.call(msg, count)
        }
    })
};

Теперь, когда я называю это так:

mynamespace.fetch($(this).attr('href'), 25, true, another namespace.createPost);

Я бы ожидал, что callback.call(msg, count) разрешится до callback.call(/*the ajax response*/, 25);

Однако, когда я запускаю его, я получаю msg == 25 и count == 'undefined'. Я в недоумении, почему ...

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

.call вызывает функцию с явным контекстом, заданным первым аргументом, поэтому callback.call(msg, count) вызывает функцию обратного вызова с msg, установленным в качестве контекста (значение this внутри функции обратного вызова для этого вызова) и count в качестве первого аргумента.

Так что вы, вероятно, захотите callback( msg, count ) или callback.call( namespace, msg, count );, что означает, что this внутри обратного вызова будет ссылаться на namespace для этого вызова.

1 голос
/ 22 декабря 2011

$.ajax() функция имеет параметр контекста, который вы можете использовать для этой цели.

1003 *
...