9

Запрос Ajax возвращает 200 OK, но вместо успеха срабатывает событие ошибки

10

Я реализовал 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 ответ(ов)

0

Вы просто должны удалить строку 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
});

Удаление этой строки может помочь избежать проблемы с неправильной интерпретацией ответа сервера.

0

Похоже, что ваша aspx-страница не возвращает объект JSON. Вам необходимо сделать что-то вроде этого в методе page_load:

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<ваш объект>);

Response.Write(OutPut);

Также попробуйте изменить вашу функцию AjaxFailed:

function AjaxFailed(XMLHttpRequest, textStatus) {
    // Здесь вы можете обработать ошибку
}

Параметр textStatus должен предоставить информацию о типе ошибки, с которой вы столкнулись.

0

Я столкнулся с этой проблемой при использовании обновленной библиотеки jQuery. Если метод сервиса ничего не возвращает, это означает, что его тип возвращаемого значения — void.

В таком случае в вашем Ajax-запросе укажите dataType: 'text'.

Это решит вашу проблему.

0

Вам нужно просто удалить dataType: 'json' из вашего заголовка, если ваш метод веб-сервиса возвращает void.

В этом случае AJAX-запрос не ожидает возвращаемого значения в формате JSON.

0

Для того чтобы гарантировать, что ответ возвращается в формате 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, чтобы завершить выполнение скрипта и предотвратить дальнейший вывод.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь