#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
, и тогда мы узнаем, что цикл выполнялся в последний раз.