Ajax请求返回200 OK,但是会引发错误事件而不是成功

JavaScript

Davaid神无

2020-03-11

我已经在我的网站上实现了Ajax请求,并且正在从网页调用端点。它总是返回200 OK,但是jQuery执行error事件。我尝试了很多事情,但无法弄清问题所在。我在下面添加我的代码:

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")成功删除后,我需要该字符串。我可以删除内容,但是没有收到此消息。这是正确的还是我做错了什么?解决此问题的正确方法是什么?

第545篇《Ajax请求返回200 OK,但是会引发错误事件而不是成功》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

7个回答
LEvaGreen 2020.03.11

您的脚本要求返回JSON数据类型。

尝试这个:

private string test() {
  JavaScriptSerializer js = new JavaScriptSerializer();
 return js.Serialize("hello world");
}
神无前端Jim 2020.03.11

我有同样的问题。这是因为我的JSON响应包含一些特殊字符,并且服务器文件未使用UTF-8编码,因此Ajax调用认为这不是有效的JSON响应。

Jim前端Near 2020.03.11

我遇到过同样的问题。我的问题是我的控制器返回的是状态码而不是JSON。确保您的控制器返回类似以下内容的内容:

public JsonResult ActionName(){
   // Your code
   return Json(new { });
}
理查德小宇宙 2020.03.11

令我感到困惑的另一件事是使用localhost而不是127.0.0.1,反之亦然。显然,JavaScript无法处理彼此之间的请求。

Davaid阳光 2020.03.11

我认为您的aspx页面未返回JSON对象。您的页面应执行以下操作(page_load)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

另外,尝试更改您的AjaxFailed:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus 应该给你你得到的错误类型。

Tony阳光 2020.03.11

这只是出于记录目的,因为我在寻找类似于OP的问题的解决方案时碰到了这篇文章。

就我而言,由于Chrome中的同源策略我的jQuery Ajax请求被阻止了修改服务器(Node.js)来解决所有问题:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

从字面上看,我花了一个小时将我的头撞在墙上。我很蠢...

布雷西 2020.03.11

jQuery.ajax尝试根据指定的dataType参数或Content-Type服务器发送标头转换响应主体如果转换失败(例如,如果JSON / XML无效),则会触发错误回调。


您的AJAX代码包含:

dataType: "json"

在这种情况下,jQuery:

将响应评估为JSON并返回一个JavaScript对象。[…]严格解析JSON数据;任何格式错误的JSON都会被拒绝,并引发解析错误。[…]空响应也被拒绝;服务器应返回null或{}的响应。

您的服务器端代码返回带有200 OK状态的HTML代码段jQuery期望使用有效的JSON,因此会引发抱怨的错误回调parseerror

解决方案是dataType从jQuery代码中删除参数,并使服务器端代码返回:

Content-Type: application/javascript

alert("Record Deleted");

但我宁愿建议返回JSON响应并在成功回调中显示消息:

Content-Type: application/json

{"message": "Record deleted"}

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android