Не удалось выполнить событие Ajax
У меня есть регистрационная форма, и я использую $.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?
Ответы
Ответ 1
Результат, вероятно, не в формате JSON, поэтому, когда jQuery пытается разобрать его как таковой, он терпит неудачу. Вы можете поймать ошибку с помощью функции error:
callback.
Кажется, вам не нужна JSON в этой функции, поэтому вы также можете вывести строку dataType: 'json'
.
Ответ 2
Хотя проблема уже решена, я добавляю это в надежде, что она поможет другим.
Я сделал ошибку, попытался использовать функцию прямо так (успех: 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 вызывается, даже если веб-служба возвращает исключение.
Ответ 3
Я попытался удалить строку dataType, и это не сработало для меня. Я обошел проблему, используя "полный", а не "успех" в качестве обратного вызова. Обратный вызов успеха все еще терпит неудачу в IE, но поскольку мой script запускает и завершает все, что мне все равно.
$.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 ...
}
});
Ответ 4
Убедитесь, что вы не печатаете (эхо или печатаете) текст или данные перед созданием ваших форматированных данных JSON в вашем файле PHP. Это может объяснить, что вы получаете -sucessfull 200 OK, но ваше событие sucess все еще не работает в вашем javascript. Вы можете проверить, что получает ваш script, проверив раздел "Сеть - ответ" в firebug для POST submit1.php.
Ответ 5
Поместите alert()
в ваш обратный вызов success
, чтобы убедиться, что он вообще вызван.
Если это не так, просто потому, что запрос не был успешным вообще, даже если вам удастся поразить сервер. Разумными причинами могут быть истечения тайм-аута, или что-то в вашем php-коде генерирует исключение.
Установите аддон firebug для firefox, если вы еще этого не сделали, и проверьте обратный вызов AJAX. Вы сможете увидеть ответ и получит ли он успешный ответ (200 OK). Вы также можете поместить еще один alert()
в обратный вызов complete
, который обязательно должен быть вызван.
Ответ 6
У меня была такая же проблема. это происходит потому, что javascript
ожидает json
тип данных при возврате данных. но если вы используете эхо или печать в своем php, эта ситуация возникает. если вы используете функцию echo
в php
для возврата данных, просто удалите dataType : "json"
, работая довольно хорошо.
Ответ 7
Я возвращал действительный JSON, получив ответ 200 в моем "полном" обратном вызове и мог видеть его в хромной сетевой консоли... НО я не указал
dataType: "json"
как только я это сделал, в отличие от "принятого ответа", это фактически устранило проблему.
Ответ 8
У меня возникла проблема с использованием функции ajax для восстановления пароля пользователя от Magento. Событие успеха не было уволено, тогда я понял, что есть две ошибки:
- Результат не возвращался в формате JSON
- Я пытался преобразовать массив в формат JSON, но этот массив имел не-utf-символы
Поэтому каждый раз, когда я пытался использовать json_eoncde() для кодирования возвращаемого массива, функция не работала, потому что один из его индексов имел не-utf-символы, большинство из которых подчеркивали бразильские португальские слова.
Ответ 9
Я попытался вернуть строку из контроллера, но почему управление возвратом к блоку ошибок не в успехе 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);
}
});
Ответ 10
Я столкнулся с той же проблемой при обращении к контроллеру, который не возвращает ответ об успешном завершении, когда был изменен мой контроллер для возврата сообщения об успешном завершении. обратите внимание, используя Lavalite Framework. до:
public function Activity($id)
{
$data=getData();
return
$this->response->title('title')
->layout('layout')
->data(compact('data'))
->view('view')
->output();
}
after code looks like:
try {
$attributes = $request->all();
//do something
return $this->response->message('')
->code(204)
->status('success')
->url('url'. $data->id)
->redirect();
} catch (Exception $e) {
return $this->response->message($e->getMessage())
->code(400)
->status('error')
->url('nothing Wrong')
->redirect()
}
это сработало для меня
Ответ 11
Я использую 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>";
?>
Ответ 12
в моем случае ошибка была в стороне сервера, и по этой причине он возвращал html
wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");
Ответ 13
Добавьте обратный вызов "error" (так же, как "success") следующим образом:
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
},
error: function(jqXhr, textStatus, errorMessage){
console.log("Error: ", errorMessage);
}
});
Итак, в моем случае я увидел в консоли:
Error: SyntaxError: Unexpected end of JSON input
at parse (<anonymous>), ..., etc.
Ответ 14
У меня была та же проблема, я решил ее таким образом: Мой AJAX:
event.preventDefault();
$.ajax('file.php', {
method: 'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({tab}),
success: function(php_response){
if (php_response == 'item')
{
console.log('it works');
}
}
})
Хорошо. Проблема не в json, а только в php-ответе. До: мой ответ php был:
echo 'item';
Сейчас:
$variable = 'item';
echo json.encode($variable);
Теперь мой успех работает. PS. Извините, если что-то не так, но это мой первый комментарий на этом форуме :)
Ответ 15
успешный обратный вызов принимает два аргумента:
success: function (data, textStatus) { }
Также убедитесь, что submit1.php
устанавливает правильный заголовок типа содержимого: application/json