Попытка выполнить вызовы javascript AJAX по порядку - PullRequest
2 голосов
/ 13 июня 2011

Я пытался выполнить три вызова AJAX, и мне было предложено следующее:

function getData(Code) {
    return $.post('/adminA/GetData', { Code: Code }, function (data) {/*etc.*/});
}

getData(0).done(function() {
    getData(1).done(function() {
        getData(2);
   });
});

Когда я запускаю код, выдается сообщение о том, что getData(0) не определено.Когда я запускаю такой код, он работает нормально, но данные возвращаются не по порядку:

 getData(0);
 getData(1);
 getData(2);
 getData(3);

Кто-нибудь знает, почему первое решение не работает.Похоже, он пытается выполнить .done на чем-то, о чем он не знает.

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

Ваш опубликованный код выглядит хорошо для меня.

Я положил копию на http://jsfiddle.net/alnitak/G8tmp/, и она работает как требуется.

Вы сообщили об ошибке в retrieveData(), но в опубликованном коде такой функции нет.

1 голос
/ 13 июня 2011

Изменить функцию getData для получения функции обратного вызова. Как это:

function getData(Code,done) {
    return $.post('/adminA/GetData', { Code: Code }, function (data) {if(typeof(done)=='function') {done();} /*etc.*/});
}

Позже, чтобы последовательно вызывать AJAX, просто назовите его так:

getData(0,function() {
    getData(1,function() {
        getData(2);
   });
});
1 голос
/ 13 июня 2011

Вы вызываете $.post, а затем пытаетесь определить событие done после вызова.

Я знаю, это уродливо, но я предполагаю, что сработает следующее:

$.post('/adminA/GetData', { Code: 0 }, function (data) {/*etc.*/}).done(function(){
    $.post('/adminA/GetData', { Code: 1 }, function (data) {/*etc.*/}).done(function(){
        $.post('/adminA/GetData', { Code: 2 }, function (data) {/*etc.*/}).done(function(){
            $.post('/adminA/GetData', { Code: 3 }, function (data) {/*etc.*/});
        });
    });
});

Некоторый изящный рефакторинг должен помочь вам уменьшить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...