2016-06-03 2 views
4

Я хочу, чтобы выполнить некоторые $ .ajax() поборы в определенном порядке, так что я пытался использовать $ .При вроде этого: (только для тестирования)

$.when.apply(null,[ajaxRequisition1(),ajaxRequisition2()]).then(function() { 
    console.log("Completed all requests."); 
    }); 

Но он снимает сообщение на консоли до того, как заявки будут сделаны. Какие-либо предложения?

Благодаря

EDIT

Вот один из моих поборов. Я опубликую один, но другие очень похожи, меняя только некоторые параметры.

код:

function ajaxRequisition1(){ 
$.ajax({ 
     type:'GET', 
     crossDomain:true, 
     url:'http://www.myurl.com.br/api/my_php.php?callbackplat=?', 
     dataType:'jsonp', 
     data: {currency: $('#cur').val()}, 
     beforeSend: function(){ 
      $('#loading').css("display","block"); 
      $('table[name=tb_latam]').css("opacity","0.01"); 

     }  

    }).done(function(data){ 
      console.log(data); 
      //HERE I BUILD A TABLE USING THE DATA RECEIVED. 

      $('#loading').css("display","none"); 
      $('table[name=tb_latam]').css("opacity","1"); 


      $('#tb_latam').append('<tr> <td data-nome="A-ACTIVE" class="column_st">'+'Active'+ 
           '</td><td class="c_qtdA column_qtd">'+data.lat_qtdA+ 
           '</td><td id="a2"class="a">'+data.lat_active+ 
           '</td><td>'+data.lat_p_active+'</td></tr>'); 


      $('#tb_latam').append('<tr> <td data-nome="I-INACTIVE" class="column_st">'+'Inactive'+ 
           '</td><td class="c_qtdI column_qtd">'+data.lat_qtdI+ 
           '</td><td class="i">'+data.lat_inactive+ 
           '</td><td>'+data.lat_p_inactive+'</td></tr>'); 

      $('#tb_latam').append('<tr> <td data-nome="R-REPLACED" class="column_st">'+'Replaced'+ 
           '</td><td class="c_qtdR column_qtd">'+data.lat_qtdR+ 
           '</td><td class="r">'+data.lat_replaced+ 
           '</td><td>'+' - '+'</td></tr>'); 

    }) 
    .fail(function(data, textStatus, errorThrown){ 
     alert("ERROR!."); 
     console.log(data); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }); 
    return false; 
} 

ответ

4

jQuery $.when() принимает отложенные объекты. Пока ваш ajaxRequisition возвращает non deferred, $.when() затем вернет разрешенное обещание.

Попробуйте изменить свой код,

function ajaxRequisition1() { 
    return $.ajax({ 
     ... 
    }); 
} 

function ajaxRequisition2() { 
    return $.ajax({ 
     ... 
    }); 
} 

$.when.apply(null, [ajaxRequisition1(),ajaxRequisition2()]).done(function() { 
    console.log("Completed all requests."); 
}); 
+0

Спасибо. Я просто положил 'return' перед' $ .ajax() 'и все сработало! – Lioo

2

Я считаю, что вам нужно использовать .done(...).

Проверьте, пожалуйста, this, чтобы узнать отличия.

редактировать

В соответствии с Документами из JQuery, если вы не ходи-а-обещание метода .when(...), то .then(...) будет вызван автоматически и обработать аргументы, которые вы прошли в .when(...) как уже решены обещания , а также передать их в .then(...)

Итак, массив, который вы проходите, должен быть обещанием, чтобы. when(...) вызывается в нужное время.

Если один аргумент передается jQuery.when(), и это не отложенный или обещание, это будет рассматриваться как разрешенные будущие периоды и любые doneCallbacks прикрепленных будут выполняться немедленно.

Check docs.

редактировать 2

Я думал, что ваши методы ajaxRequisitions уже работали. Вот пример из документации к функции .when(...)

$.when($.ajax("test.aspx")).then(function(
     data, textStatus, jqXHR) { 
    alert(jqXHR.status); // Alerts 200 
}); 

Вам необходимо обновить его, чтобы вы могли добавить .apply(...), и ваш ajaxRequisition ... Методы возвращают Ajax позвонить вам необходимо в каждом из них.

+0

Привет, я изменил в '.done', но ничего не изменилось, то сообщение консоль продолжает прибывать до того, как поборы закончить. – Lioo

+0

Хорошо, теперь я вижу, что ваша проблема другая. Я обновляю ответ – onzinsky

+0

Ун, хорошо, но «$.ajax() 'requisitions уже не возвращается как Promisses? Если нет, как я могу заставить их это сделать? Можете ли вы дать мне рабочий пример? – Lioo

Смежные вопросы