У меня есть форма регистрации, и я использую ее $.ajax
для отправки.
Это мой запрос AJAX:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
В моем файле submit1.php я проверяю наличие полей адреса электронной почты и имени пользователя в базе данных. Я хочу отобразить сообщение об ошибке, если эти значения существуют без обновления страницы .
Как я могу добавить это к успешному обратному вызову моего AJAX-запроса?
javascript
jquery
ajax
codingbbq
источник
источник
Ответы:
Результат, вероятно, не в формате JSON, поэтому, когда jQuery пытается проанализировать его как таковой, происходит сбой. Вы можете отловить ошибку с помощью
error:
функции обратного вызова.В любом случае, вам, похоже, не нужен JSON в этой функции, поэтому вы также можете убрать
dataType: 'json'
строку.источник
dataType:'text'
dataType:
не указано, ноurl:
заканчивается на.json
.$.post
псевдониме, поставляемом вjson
качестве типа данных без фактического json, поступающего с сервера, не запускаетсяsuccess
обратный вызовХотя проблема уже решена, я добавляю это в надежде, что это поможет другим.
Я сделал ошибку, пытаясь использовать функцию, подобную этой (успех: OnSuccess (productID)). Но сначала вы должны передать анонимную функцию:
Если вы не используете анонимную функцию в качестве оболочки, вызывается OnSuccess, даже если веб-служба возвращает исключение.
источник
Я попытался удалить строку dataType, и у меня это не сработало. Я обошел проблему, используя «полный» вместо «успех» в качестве обратного вызова. Обратный вызов успеха все еще терпит неудачу в IE, но так как мой сценарий запускается и завершается в любом случае, это все, что мне нужно.
в jQuery 1.5 вы также можете сделать это следующим образом.
источник
complete
будет вызываться всегда, независимо от того, был ли вызов ajax успешным или нет, в то время как вызываетсяsuccess
только, если веб-сервер отвечает200 OK
HTTP-заголовком (все в порядке).Убедитесь, что вы не печатаете (выводите или выводите) какой-либо текст / данные, прежде чем генерировать данные в формате JSON в файле PHP. Это может объяснить, что вы получили -sucessfull 200 OK-, но ваше событие sucess все равно не срабатывает в вашем javascript. Вы можете проверить, что получает ваш скрипт, проверив раздел «Сеть - Ответ» в firebug для POST submit1.php.
источник
Вставьте
alert()
вашsuccess
обратный вызов, чтобы убедиться, что он вызывается вообще.Если это не так, то это просто потому, что запрос вообще не был успешным, даже если вам удастся попасть на сервер. Разумные причины могут быть в том, что истекло время ожидания, или что-то в вашем php-коде вызывает исключение.
Установите дополнение Firebug для Firefox, если вы еще этого не сделали, и проверьте обратный вызов AJAX. Вы сможете увидеть ответ и узнать, получил ли он успешный ответ (200 OK). Вы также можете поместить другой
alert()
вcomplete
обратный вызов, который обязательно должен быть вызван.источник
success
, то это не успех. Так как ответ 200 OK, ответ Tatu кажется разумным, но для дальнейшего устранения неполадок вы можете использовать другое событие,complete
которое вызывается всегда, независимо от того, успешен ли запрос (success
только если запрос успешен).complete: function (xhr, status) { alert('complete: '+status); }
У меня была такая же проблема. это происходит потому, что
javascript
ожидайтеjson
тип данных в возвращаемых данных. но если вы используете echo или print в своем php, такая ситуация возникает. если вы используетеecho
функциюphp
для возврата данных, просто удалитеdataType : "json"
работу довольно хорошо.источник
Я возвращал действительный JSON, получая ответ 200 в моем «завершенном» обратном вызове, и мог видеть его в сетевой консоли chrome ... НО я не указал
однажды я сделал, в отличие от «принятого ответа», который на самом деле решил проблему.
источник
Я использую XML для переноса результата с php на сервере на веб-страницу, и у меня такое же поведение.
В моем случае причина была в том, что закрывающий тег не совпадал с открывающим тегом.
источник
У меня была эта проблема с использованием функции ajax для восстановления пароля пользователя из Magento. Событие успеха не было запущено, тогда я понял, что было две ошибки:
Поэтому каждый раз, когда я пытался использовать json_eoncde () для кодирования возвращаемого массива, функция не работала, потому что один из ее индексов содержал не-utf символы, большинство из которых были выделены бразильскими португальскими словами.
источник
Я пытался вернуть строку из контроллера, но почему управление, возвращающееся к блоку ошибок, не выполняется в ajax
источник
Я столкнулся с той же проблемой при обращении к контроллеру, который не возвращает ответ об успешном завершении, когда был изменен мой контроллер для возврата сообщения об успешном завершении. обратите внимание, используя Lavalite Framework. перед:
это сработало для меня
источник
У меня была та же проблема, я решил ее таким образом: Мой AJAX:
Хорошо. Проблема не в json, а только в php-ответе. До: мой ответ php был:
Сейчас:
Теперь мой успех работает. PS. Извините, если что-то не так, но это мой первый комментарий на этом форуме :)
источник
в моем случае ошибка заключалась в том, что это было на стороне сервера, и по этой причине он возвращал HTML
источник
Добавьте обратный вызов «error» (так же, как «success») следующим образом:
Итак, в моем случае я увидел в консоли:
источник
Вы должны объявить как Обратный вызов Успеха, так и Ошибки. Добавление
должен решить проблему
источник
Обратный вызов принимает два аргумента:
Также убедитесь, что
submit1.php
устанавливает правильный заголовок типа контента:application/json
источник
success
принимает два аргумента, кажется совершенно не относящимся к вопросу. Вы можете передать любое количество параметров в функцию javascript, независимо от того, сколько она принимает в своем объявлении, так что это определенно не является причиной этих проблем, и, поскольку ни одно из значенийdata
илиtextStatus
не используется в обратном вызове успеха, кажется, что не будет никакой веской причины объявлять их в функции вообще.