2013-07-22 4 views
5

я в курсе $ переваривать уже в вопросе об ошибке прогресса, но здесь i'am не вызывая применять или переваривать метод явно

Я использую два HTTP вызовов в функции же angularJS, что приводит меня к ошибке, что $ дайджеста уже идет, мой код, как

$http.post('/CRUDOper/memberInsert',$scope.memberAdd). 
     success(function(post){ 
      if(!post.IsSuccess){ 
       alert(post.msg + "Try Again"); 
       return; 
      } 
      alert("Member Added Successfully"); 
     } 
    ); 

    var autopass = Math.random().toString(36).slice(-8); 
    var passwordinsert = {formno : $scope.memberAdd.formno, password : autopass }; 
    $http.post('/CRUDOper/autogeneratepassword',passwordinsert). 
     success(function(post){ 
      if(!post.IsSuccess){ 
       alert(post.msg + "Try Again"); 
       return; 
      } 
      alert("Autogenerated Password for present user : " + autopass); 
     } 
    ); 

как запрос называется правильно, что мое беспокойство вызывает ошибки в firebug, что $ digest уже выполняется, я могу обработать эту ошибку? цикл событий

+0

Как вы упомянули в вопросе, вы не должны получать эту проблему, если вы не вызываете $ apply () или $ digest() вручную. Вы абсолютно уверены, что это фрагмент кода, вызывающий проблему? – godfrzero

+0

да, потому что, когда я вызываю только один запрос Http, все, кажется, работают нормально для меня, только когда я называю эти два вместе, возникает проблема. –

+3

Вы пытались заменить alert на console.log? –

ответ

1

AngularJS»не ждать, пока alert(), confirm() и prompt() возвращают значение (по крайней мере, для $http вызовов). Тем не менее, существует короткий интервал между отображением всплывающего окна и входом в цикл $digest. Это объясняет, почему OP не получил ошибку в первый раз: OP быстро нажал или нажал.

Чтобы убедиться, что это не зависит от количества HTTP-вызовов, попробуйте использовать одно предупреждение в методе success() одного HTTP-вызова. Не будет ошибки, если вы подтвердите всплывающее окно в течение ок. 300 мс, но будет ошибка, если вы подтвердите это позже.

0

Вместо этого вы должны использовать $ window.alert. Все еще это происходит, когда выполняется другой дайджест, быстрое обходное решение сворачивает его в $ timeout()

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