2015-11-25 2 views
0

Я использовал отложенные ожидания, чтобы подождать, пока две функции не будут завершены (они подают шаблон и отображают результат), прежде чем подавать выделение, присутствующее в шаблоне.Ожидание асинхронного вызова, не работающего с ajax

Когда отображается вкладка, я делаю.

var notAssociateContact = getNotAssociateContact(); 
var associateContact = getAssociateContact(); 

$.when(notAssociateContact, associateContact).then(assignLocationToSelector($("select[name=locationIds\\[\\]]"))); 

function getNotAssociateContact() { 

    var deferred = $.ajax({ 
     type: "GET", 
     url: "http://localhost:8080/rest/contacts/notassociatedto/" + $("#lodgerId").val(), 
     success: function(data, status, jqXHR) { 

      $("#lodgerContactAvailableDivTemplate").empty(); 
      if (data.length != 0) { 
       $("#lodgerContactAvailableDivTemplate").append(templateLodgerContactAvailable(data)); 
       $('#lodgerContactAvailableTableResult').bootstrapTable(); 
      } 
     }, 
     error: function(jqXHR, status) { 
      // error handler 
      alert("error " + jqXHR + " - " + status); 
     } 
    }).then(function(response) { 
     // optional callback to handle this response 
    }); 
    return deferred; 

} 


function getAssociateContact() { 
    var deferred = $.ajax({ 
     type: "GET", 
     url: "http://localhost:8080/rest/lodgers/" + $("#lodgerId").val() + "/contacts", 
     success: function(data, status, jqXHR) { 
      $("#lodgerContactDivTemplate").empty(); 
      if (data.length != 0) { 
       $("#lodgerContactDivTemplate").append(templateLodgerContact(data)); 
       $('#lodgerContactTableResult').bootstrapTable(); 
       // $('#lodgerContactTableResult tr').bind("dblclick", null, contactReferenceSelectedRow); 
      } 
     }, 
     error: function(jqXHR, status) { 
      // error handler 
      alert("error " + jqXHR + " - " + status); 
     } 
    }).then(function(response) { 
     // optional callback to handle this response 
    }); 
    return deferred; 
} 

У меня нет никакой ошибки, но назначениеLocationToSelector не совпадает с запущенным. Выбор пуст.

В консоли, если я запускаю

assignLocationToSelector($("select[name=locationIds\\[\\]]")); 

Выберите правильно Feeded.

Когда я отладка и прибыть на $ .when, я вижу, то вызов два Аякса в очереди ...

Так что это, кажется, что есть проблема с отсроченным.

ответ

2

Вашему $.when().then() необходимо передать ссылку на функцию. Вы вызываете функцию немедленно, а затем передаете результат возврата. Это выполняет функцию немедленно, а не позволяет $.when() позвонить ей позже.

Измени $.when() заявление от этого:

$.when(notAssociateContact, associateContact).then(assignLocationToSelector($("select[name=locationIds\\[\\]]"))); 

к этому:

$.when(notAssociateContact, associateContact).then(function() { 
    assignLocationToSelector($("select[name=locationIds\\[\\]]")); 
}); 
Смежные вопросы