2013-12-18 1 views
4

Вот метод jQuery, который я создал в представлении ASP.NET MVC Razor. Требуемая функциональность:

  • Выбери прокручиваемый
  • выпалить Массив Аякса просит
  • После того, как все Ajax запросов завершения шоу оповещения диалогового

код отображается корректно работать, за исключением того, что диалоговое окно предупреждения «ok» отображается несколько раз, один раз для каждого запроса. Это говорит о том, что метод .then() вызывается для каждого запроса, а не ждет завершения всех. Что я здесь делаю неправильно?

// Save changed entity notes 
function saveChangedNotes() { 

    var ajaxReqs = []; 
    $('textarea').each(function() { 
    ajaxReqs.push($.ajax({ 
     type: "POST", 
     url: "@Url.Action("UpdateCompanyNote", "Company", new {companyId = Html.CompanyIdFromRouteValues()})", 
     data: { 
      noteId: this.id, 
      noteText: $(this).val() 
     } 
     }) 
    ); 

    // When all ajax complete.. 
    $.when.apply($, ajaxReqs).then(function() {  
     alert('ok'); 
    }).fail(function() {   
     alert('error'); 
    }); 
    }); 
} 

ответ

5

вы выполняете $.when.applyвнутри текстового поля каждый цикл. Подсчитайте свои закрывающие скобки.

+0

Duh .. и я думал, что это меня недоразумение обещания :) Спасибо, хорошее место –

1

Существует простой альтернативный способ сделать это без использования $.when.apply и массива вообще.

Вместо этого используйте шаблон promise = $.when(promise, anotherPromise).

например. для примера что-то вроде этого

// Save changed entity notes 
function saveChangedNotes() { 
    // Start with a resolved promise (undefined does the same thing for $.when!) 
    var promise; 
    $('textarea').each(function() { 
     promise = $.when(promise, $.ajax({ 
      type: "POST", 
      url: "@Url.Action(" 
      UpdateCompanyNote ", " 
      Company ", new {companyId = Html.CompanyIdFromRouteValues()})", 
      data: { 
       noteId: this.id, 
       noteText: $(this).val() 
      } 
     })); 
    }); 
    // When all ajax complete.. 
    promise.then(function() { 
     alert('ok'); 
    }).fail(function() { 
     alert('error'); 
    }); 
} 
+0

я интуитивно делал это, а также - с использованием массивов и кодирования с побочными эффектами, кажется неестественным с функциональным -строчный jquery apporach. Но я думаю, что это должно быть просто «обещание», а не '$ обещание» в последнем утверждении. Просто опечатка. –

+0

@Alex Pakka: Спасибо. Да, это опечатка для вырезания/вставки. ура –

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

  • Нет связанных вопросов^_^