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#代码为JqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

成功删除后,我需要("Record deleted")字符串。 我可以删除内容,但我没有收到此消息。 这是正确的还是我做错了什么? 解决这个问题的正确方法是什么?


您的Ajax请求包含以下设置:

dataType: "json"

该文档指出,jQuery:

将响应评估为JSON并返回一个JavaScript对象。 (...)JSON数据严格分析; 任何格式不正确的JSON都会被拒绝并引发解析错误。

这意味着如果服务器以200 OK状态返回无效的JSON,则jQuery将触发错误函数并将textStatus参数设置为"parsererror"

解决方案:确保服务器返回有效的 JSON。 值得注意的是,一个空的响应也被认为是无效的JSON; 你可以返回{}null ,例如JSON验证。

您可以在jsonlint.com上检查JSON是否有效。


我使用多个空格分隔的dataType (jQuery 1.5+)有一些好运气。 如:

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'text json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

您只需在AJAX调用中删除dataType:“json”

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json', //**** REMOVE THIS LINE ****//
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
链接地址: http://www.djcxy.com/p/6669.html

上一篇: Ajax request returns 200 OK, but an error event is fired instead of success

下一篇: How to cancel/abort jQuery AJAX request?