Ajax не работает с циклом for. Может ли кто-нибудь исправить мой код и объяснить мне, пожалуйста. Я просто хочу поместить это значение в свою базу данных. Я могу заставить его работать, только если я вызову ajax один раз не так, как это, он находится в цикле for.
var counter = $("input[name^= 'quantity']").length;
var array1 = $("input[name^= 'quantity']");
var array2 = $("input[name^= 'unit']");
var array3 = $("input[name^= 'item_description']");
var array4 = $("input[name^= 'stock_no']");
var array5 = $("input[name^= 'eunitcost']");
var array6 = $("input[name^= 'ecost']");
var i;
for (i = 0; i < counter; i++) {
$.ajax({
url: 'http://localhost/pm/admin/service/user-service.php',
type: 'POST',
dataType: 'json',
data: {
operation: 'pr-items',
pr_no: $('#prno').val(),
quantity: array1.eq(i).val(),
unit: array2.eq(i).val(),
item_description: array3.eq(i).val(),
stock_no: array4.eq(i).val(),
eunitcost: array5.eq(i).val(),
ecost: array6.eq(i).val
},
success: function(data) {
alert('pr items success');
//todo
},
error: function(data) {
// alert('pr items error');
//todo
}
});
}
В идеале вы должны отправлять только один запрос AJAX. Избегайте зацикливания и создания запросов AJAX для каждой записи. Создайте массив и закодируйте его как JSON.
@PeterFestejo: Вам не хватает () после val в вашей строке ecost. Это помогает?
Попробуйте установить async: false в свой вызов ajax
«мой код не работает» без объяснения того, что означает «работает». Каков ваш желаемый результат? Что конкретно не работает? Без этой информации этот вопрос не по теме и должен быть закрыт
@Sanjay: Это совет ужасный. И, скорее всего, скоро перестанет работать в браузерах, если еще не сделал этого.
@ Дэвид. Хотел бы я проголосовать за ваш комментарий тысячу раз.
@interfect хорошо, что работает. Но когда я запускаю его снова, он предупреждает об ошибке pr item, когда я удаляю комментарий к нему.
@PeterFestejo: если операция AJAX вызывает обратный вызов error, то сервер возвращает ошибку. Что это за ошибка? Используйте инструменты отладки вашего браузера, чтобы наблюдать за фактическими запросами, отправляемыми на сервер, и фактическими ответами, поступающими с сервера. Проверьте журналы серверного приложения на наличие информации об ошибках. Вам нужно отлаживать, чтобы увидеть, что происходит.
Не тратьте время на этот код, потому что он ужасен с точки зрения производительности, узнайте, как передать один массив в одном запросе на сервер.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я выяснил, что причина, по которой мой приведенный выше код не работает, потому что у ecost: array6.eq(i).val нет () после .val, а также я обнаружил, что использование ajax-вызовов в циклах не является хорошей практикой. Мне жаль, если я не могу хорошо объяснить здесь, в stackoverflow, что привело к отрицательным голосам и временному бану. Но я это заслужил. Я просто не могу улучшить свои вопросы.
Каким именно образом это не удается? В чем проблема?