2014-08-28 4 views
0

Мне нужно выполнить функцию ajax, деталь здесь заключается в том, что я хочу выполнить эту функцию до тех пор, пока другая функция ajax не вернет успех.Выполнение функции ajax до получения успеха другого вызова ajax

Это функция, которая будет я должен ждать, чтобы вернуть успех (try..catch блок)

Ajaxfunction1

$.ajax({ 
     type : "GET", 
     url :url, 
     data : parameters, 
     success : function(msg) { 
      try { 
       var jsonObject = JSON.parse(msg); 
       console.debug(msg); 
       //SendToDMS(msg); 
      } catch (e) { 
       $("#SaveConfig").removeAttr("disabled"); 
       toastr.error(msg + '.', "Message"); 
      } 
     }, 
     failure : function(msg) { 
      $("#SaveConfig").removeAttr("disabled"); 
      toastr.error('Error: ' + msg + '.', "Message"); 
     } 
    }); 

Я хочу что-то вроде этого:

while (Ajaxfunction1 != success) { // while the previous ajax function not return success execute this another ajax function 
    $.ajax({ 
      type : "GET", 
      url :url, 
      data : parameters, 
      success : function(msg) { 
       // something on success 
      }, 
      failure : function(msg) { 
       // something when comes an error 
      } 
     }); 
} 

Как может Я это делаю? Спасибо за вашу помощь

+1

сделать его функцию и вызвать функцию от успеха первого вызова Ajax, использовать отложенные объекты с $ .when, используйте функцию SetTimeout для проверки флага, который установлен в успехе первой функции , Любой из этих 3 жизнеспособных, некоторые из них «чище», чем другие. – Ohgodwhy

+0

Что значит «пока функция ajax возвращает успех», вы выполняете его только один раз, либо он терпит неудачу, либо преуспевает? – adeneo

+0

Мне нужно выполнить второй вызов ajax несколько раз, пока первый не получит событие успеха, поэтому я помещаю блок while – martinezjc

ответ

1

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

var waitFor = $.ajax({ 
    type : "GET", 
    url : url, 
    data : parameters 
}).done(function(msg) { 
    try { 
     var jsonObject = JSON.parse(msg); 
    } catch (e) { 
     $("#SaveConfig").removeAttr("disabled"); 
     toastr.error(msg + '.', "Message"); 
    } 
}).fail(function(msg) { 
    $("#SaveConfig").removeAttr("disabled"); 
    toastr.error('Error: ' + msg + '.', "Message"); 
}); 

(function rec() { 
    $.ajax({ 
     type : "GET", 
     url : url, 
     data : parameters 
    }).always(function() { 

     if (waitFor.state() != 'resolved') rec(); 

    }).done(function(msg) { 
     // something on success 
    }).fail(function(msg) { 
     // something when comes an error 
    }); 
})(); 
+0

Спасибо, работает как шарм :)! – martinezjc