У меня есть регистрационная форма, и я использую $.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?
Результат, вероятно, не в формате JSON, поэтому, когда jQuery пытается разобрать его как таковой, он терпит неудачу. Вы можете поймать ошибку с error:
функция обратного вызова.
Кажется, вам не нужна JSON в этой функции, поэтому вы также можете вывести dataType: 'json'
.
Я попытался удалить строку dataType, и это не сработало для меня. Я обошел проблему, используя «полный», а не «успех» в качестве обратного вызова. Обратный вызов успеха все еще терпит неудачу в IE, но, поскольку мой скрипт работает и завершается в любом случае, это все, о чем я забочусь.
$.ajax({ type: 'POST', url: 'somescript.php', data: someData, complete: function(jqXHR) { if(jqXHR.readyState === 4) { ... run some code ... } } });
в jQuery 1.5 вы также можете сделать это так.
var ajax = $.ajax({ type: 'POST', url: 'somescript.php', data: 'someData' }); ajax.complete(function(jqXHR){ if(jqXHR.readyState === 4) { ... run some code ... } });
Хотя проблема уже решена, я добавляю это в надежде, что это поможет другим.
Я сделал ошибку, попытался использовать функцию прямо так (успех: OnSuccess (productID)). Но сначала вы должны передать анонимную функцию:
function callWebService(cartObject) { $.ajax({ type: "POST", url: "http://localhost/AspNetWebService.asmx/YourMethodName", data: cartObject, contentType: "application/x-www-form-urlencoded", dataType: "html", success: function () { OnSuccess(cartObject.productID) }, error: function () { OnError(cartObject.productID) }, complete: function () { // Handle the complete event alert("ajax completed " + cartObject.productID); } }); // end Ajax return false; }
Если вы не используете анонимную функцию в качестве оболочки, OnSuccess вызывается, даже если веб-служба возвращает исключение.
Убедитесь, что вы не печатаете (эхо или печатаете) текст или данные перед созданием ваших форматированных данных JSON в вашем файле PHP. Это может объяснить, что вы получаете -sucessfull 200 OK, но ваше событие sucess все еще не работает в вашем javascript. Вы можете проверить, что получает ваш скрипт, проверив раздел «Сеть – ответ» в firebug для POST submit1.php.
Поместите alert()
в свой обратный вызов success
чтобы убедиться, что он вообще вызван.
Если это не так, просто потому, что запрос не был успешным вообще, даже если вам удастся поразить сервер. Разумными причинами могут быть истечения тайм-аута, или что-то в вашем php-коде генерирует исключение.
Установите firebug addon для firefox, если вы еще этого не сделали, и проверьте обратный вызов AJAX. Вы сможете увидеть ответ и получит ли он успешный ответ (200 OK). Вы также можете добавить еще одно alert()
в complete
обратный вызов, который обязательно должен быть вызван.
У меня была такая же проблема. это происходит потому, что javascript
ожидает, что тип данных json
возвращать данные. но если вы используете эхо или печать в своем php, эта ситуация возникает. если вы используете функцию echo
в php
для возврата данных, просто удалите dataType : "json"
работает очень хорошо.
Я возвращал действительный JSON, получив ответ 200 в моем «полном» обратном вызове и мог видеть его в хромной сетевой консоли … НО я не указал
dataType: "json"
как только я это сделал, в отличие от «принятого ответа», это фактически устранило проблему.
У меня возникла проблема с использованием функции ajax для восстановления пароля пользователя от Magento. Событие успеха не было уволено, тогда я понял, что есть две ошибки:
Поэтому каждый раз, когда я пытался использовать json_eoncde () для кодирования возвращаемого массива, функция не работала, потому что один из его индексов имел не-utf-символы, большинство из которых подчеркивали бразильские португальские слова.
Я использую XML для переноса результата с php на сервере на веб-страницу, и у меня было такое же поведение.
В моем случае причина заключалась в том, что закрывающий тег не соответствовал открытому тегу.
<?php .... header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?> <result> <status>$status</status> <OPENING_TAG>$message</CLOSING_TAG> </result>"; ?>
Я попытался вернуть строку из контроллера, но почему управление возвратом к блоку ошибок не в успехе ajax
var sownum="aa"; $.ajax({ type : "POST", contentType : 'application/json; charset=utf-8', dataType : "JSON", url : 'updateSowDetails.html?sownum=' + sownum, success : function() { alert("Wrong username"); }, error : function(request, status, error) { var val = request.responseText; alert("error"+val); } });
в моем случае ошибка была в стороне сервера, и по этой причине он возвращал html
wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");
Обратный вызов успеха принимает два аргумента:
success: function (data, textStatus) { }
Также убедитесь, что submit1.php
устанавливает правильный заголовок типа контента: application/json