2015-06-13 5 views
0

я уже искал на сайте, как ждать, пока функция Аякса не будет сделано, и я нашел это решение:Подождите, пока функция Ajax не будет сделано

function next() { 
    $.when(checksign()).done(function() { 
     if (uf == 1) { 
      $("#usrdiv").css("display", "none"); 
      $("#pswdiv").css("display", "inline"); 
     } 
    }); 
} 

function checksign() { 
    $.ajax({ 
     url: "checkuser.php", 
     data: { 
      user: u 
     }, 
     method: "POST" 
    }).done(...); 
} 

, но она по-прежнему не работает, он не ждет ajax выполняется, но прямо выполняет функцию внутри done()

ответ

3

Это потому, что checksign не возвращает обещание, необходимое для цепи на функции done.

Вам не нужно $.when обертку для одного обещания либо

function next() { 
    checksign().done(function(data) { 
     if (uf == 1) { 
      $("#usrdiv").css("display", "none"); 
      $("#pswdiv").css("display", "inline"); 
     } 
    }); 
} 

function checksign() { 
    return $.ajax({ 
     url: "checkuser.php", 
     data: { 
      user: u 
     }, 
     method: "POST" 
    }).done(...); 
} 
+0

Чтобы добавить, что ** Promise ** есть, см ссылку: http://www.html5rocks.com/en/tutorials/ES6/обещание / –