увеличивайте счетчик после каждой вставки ajax, а затем показывайте его в виде сообщения

#javascript #php #jquery #ajax

#язык JavaScript #php #jquery #аякс

Вопрос:

Я использую Ajax для вставки данных в MySQL с помощью PHP, см. Мой код ниже:

 var c = 0;//initialize counter function add(){  for (var i = 0; i lt; 10; i  ) {  $.ajax({  type: "POST",  url: "insert.php",  data: {  id: id,  name: name,  email: email,  },  dataType: "json",  success: function (res) {  c  ;//increment counter  },  });  }  alert(c);//display counter }  

что я хочу сделать, так это показать предупреждение (количество раз, когда выполняется операция вставки) после завершения цикла for. Я сделал это так, как описано выше, код не работает. он всегда показывает ноль.

Есть ли какой-нибудь способ сделать ту же функциональность?

Комментарии:

1. Чтобы показать значение, которое вам нужно будет поместить alert(c) в функцию success обработчика. Однако с этим кодом есть некоторые серьезные проблемы. Во-первых, alert() заблокирует продолжение работы JS до того, как уведомление будет отклонено. Я настоятельно рекомендую вам использовать console.log(c) вместо этого. Во-вторых, заполнять ваш сервер 10 запросами-действительно плохая идея. Какова ваша реальная цель — поскольку этот код кажется избыточным.

2. Я использую оповещение только для целей тестирования. Каков ваш альтернативный способ сделать это? Я использую этот внутренний лист оценки учащихся, я хочу вставить каждую запись в базу данных.

3. Отправьте один запрос на свой сервер, содержащий сведения обо всех 10 студентах, затем просмотрите данные на стороне сервера

4. Еще одна проблема с текущим кодом заключается в том, что Ajax является асинхронным (неблокирующим), поэтому предупреждение будет выполнено немедленно, еще до того, как первые ответы вернутся клиенту.

5. @Рори Маккроссан, не могли бы вы привести пример кода в качестве ответа? за то, что вы предложили?

Ответ №1:

этот способ работает.

 var c = 0; async function add() {  for (var i = 0; i lt; 10; i  ) {  await $.ajax({  type: "POST",  url: "https://upwork.codefusiontm.com/stack/002",  data: {  id: "id",  name: "name",  email: "email",  },  dataType: "json",  success: function (res) {  c  ;//increment counter  },  });  } }  $(() =gt; {  add().then(() =gt; {  console.log("=gt;",c)  }) })  

Вам нужно использовать promisse с использованием асинхронности и ждать. Вы используете асинхронность и создаете метод добавления как асинхронный

 async function add() {  

После этого вы добавляете ожидание в $.ajax, потому что только таким образом ajax будет увеличивать c только после возврата СООБЩЕНИЯ, это необходимо сделать, потому что вы запускаете несколько сообщений в for и поэтому должны ждать завершения каждого, чтобы правильно увеличить.

 await $.ajax({  

В заключение, вы можете, наконец, получить значение переменной c

 $(() =gt; {  add().then(() =gt; {  console.log("=gt;",c)  }) })  

Не забывайте, что вызов метода должен быть выполнен в документе.готово

 $(() =gt; { })  

Ответ №2:

Учесть следующее.

 var c = 0; //initialize counter function add() {  for (var i = 0; i lt; 10; i  ) {  $.ajax({  type: "POST",  url: "insert.php",  data: {  id: id,  name: name,  email: email,  },  dataType: "json",  success: function(res) {  c  ;  if (i == 10) {  alert(c); //display counter  }  },  });  } } 

Когда вы выполните последний цикл, i будет 9, а затем увеличится до 10. Таким образом , мы можем проверить, i равно ли 10 , и тогда мы узнаем, что цикл выполнялся в последний раз.