Запрос Ajax возвращает 200 OK, но вместо успеха срабатывает событие ошибки
Я реализовал AJAX-запрос на своем веб-сайте и вызываю конечную точку с веб-страницы. Запрос всегда возвращает 200 OK, но jQuery при этом выполняет событие ошибки. Я пробовал много разных подходов, но так и не смог разобраться в проблеме. Ниже привожу свой код:
Код jQuery
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
C# код для JqueryOperation.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
Мне понадобится строка ("Record deleted")
после успешного удаления. Я могу удалить содержимое, но это сообщение не отображается. Это правильный подход, или я что-то делаю неправильно? Как правильно решить эту проблему?
5 ответ(ов)
Вы просто должны удалить строку dataType: "json" из вашего AJAX-запроса:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** УДАЛИТЕ ЭТУ СТРОКУ ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Удаление этой строки может помочь избежать проблемы с неправильной интерпретацией ответа сервера.
Похоже, что ваша aspx-страница не возвращает объект JSON. Вам необходимо сделать что-то вроде этого в методе page_load
:
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<ваш объект>);
Response.Write(OutPut);
Также попробуйте изменить вашу функцию AjaxFailed
:
function AjaxFailed(XMLHttpRequest, textStatus) {
// Здесь вы можете обработать ошибку
}
Параметр textStatus
должен предоставить информацию о типе ошибки, с которой вы столкнулись.
Я столкнулся с этой проблемой при использовании обновленной библиотеки jQuery. Если метод сервиса ничего не возвращает, это означает, что его тип возвращаемого значения — void
.
В таком случае в вашем Ajax-запросе укажите dataType: 'text'
.
Это решит вашу проблему.
Вам нужно просто удалить dataType: 'json'
из вашего заголовка, если ваш метод веб-сервиса возвращает void.
В этом случае AJAX-запрос не ожидает возвращаемого значения в формате JSON.
Для того чтобы гарантировать, что ответ возвращается в формате JSON в PHP, используйте следующий код:
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
Этот код устанавливает заголовок Content-Type
в application/json
, что указывает клиенту, что тело ответа будет представлено в формате JSON. Затем используется json_encode()
для преобразования переменной $return_vars
в JSON-строку и вывод ее с помощью echo
. В конце вызывается exit
, чтобы завершить выполнение скрипта и предотвратить дальнейший вывод.
Как загружать файлы асинхронно с помощью jQuery?
Преобразование данных формы в объект JavaScript с помощью jQuery
Как заставить jQuery выполнять синхронный запрос Ajax вместо асинхронного?
jQuery AJAX: Отправка формы
Кэширует ли Safari на iOS 6 результаты $.ajax?