Ajax request returns 200 OK, but an error event is fired instead of success
我在我的网站上实现了一个Ajax请求,我从一个网页调用端点。它总是返回200OK,但jQuery执行错误事件。我试了很多东西,但没能找出问题所在。我在下面添加我的代码:
jQuery代码1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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); } |
1 2 3 4 5 6 | protected void Page_Load(object sender, EventArgs e) { test(); } private void test() { Response.Write("<script language='javascript'>alert('Record Deleted');"); } |
删除成功后,我需要
Ajax代码包含:
1 | dataType:"json" |
在这种情况下,jquery:
Evaluates the response as JSON and returns a JavaScript object. […]
The JSON data is parsed in a strict manner; any malformed JSON is
rejected and a parse error is thrown. […] an empty response is also
rejected; the server should return a response of null or {} instead.
服务器端代码返回具有
解决方案是从jquery代码中删除
1 2 3 | Content-Type: application/javascript alert("Record Deleted"); |
但我建议返回JSON响应并在成功回调中显示消息:
1 2 3 | Content-Type: application/json {"message":"Record deleted"} |
您只需在Ajax调用中删除数据类型:"json"。
1 2 3 4 5 6 7 8 9 10 | $.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 }); |
这只是为了记录,因为我在寻找类似于OP的问题的解决方案时碰到了这篇文章。
在我的例子中,由于chrome中的相同源站策略,jquery-ajax请求无法成功。当我将服务器(node.js)修改为:
1 2 3 4 5 | response.writeHead(200, { "Content-Type":"application/json", "Access-Control-Allow-Origin":"http://localhost:8080" }); |
我的头撞在墙上花了一个小时。我觉得自己很傻…
我认为您的ASPX页面不会返回JSON对象。您的页面应该这样做(页面加载)
1 2 3 4 | var jSon = new JavaScriptSerializer(); var OutPut = jSon.Serialize(<your object>); Response.Write(OutPut); |
另外,尝试更改AjaxFailed:
1 2 3 | function AjaxFailed (XMLHttpRequest, textStatus) { } |
我在更新的jquery库中遇到了这个问题。如果服务方法不返回任何内容,则表示返回类型为
然后在你的Ajax电话中,请提到
它将解决问题。
如果实现的Web服务方法无效,则只需从头部删除
在这种情况下,Ajax调用不希望具有JSON返回数据类型。
我也有同样的问题。我的问题是我的控制器返回了一个状态代码而不是JSON。确保控制器返回如下内容:
1 2 3 4 | public JsonResult ActionName(){ // Your code return Json(new { }); } |
我也有类似的问题,但是当我试图删除数据类型时:'json'我还是有问题。我的错误是执行而不是成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function cmd(){ var data = JSON.stringify(display1()); $.ajax({ type: 'POST', url: '/cmd', contentType:'application/json; charset=utf-8', //dataType:"json", data: data, success: function(res){ console.log('Success in running run_id ajax') //$.ajax({ // type:"GET", // url:"/runid", // contentType:"application/json; charset=utf-8", // dataType:"json", // data: data, // success:function display_runid(){} // }); }, error: function(req, err){ console.log('my message: ' + err); } }); } |
使用以下代码确保响应为JSON格式(PHP版本)…
1 2 3 | header('Content-Type: application/json'); echo json_encode($return_vars); exit; |
另一件让我搞砸的事情是用
看到这个了。这也是类似的问题。我试过了。
不要拆下
注意:如果只使用php echo,则只在php文件中回送json-formate,Ajax代码返回200
如果您总是从服务器返回JSON(没有空响应),那么
- 有效(jsonlint)
- 已序列化(jsonminify)
jquery-ajax将在有效但未序列化的json上抛出"parserror"!
我也有同样的问题。这是因为我的JSON响应包含一些特殊字符,并且服务器文件不是用UTF-8编码的,所以Ajax调用认为这不是有效的JSON响应。
脚本要求返回JSON数据类型。
试试这个:
1 2 3 4 | private string test() { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize("hello world"); } |
尝试跟随
1 2 3 4 5 6 7 8 9 10 11 | $.ajax({ type: 'POST', url: 'Jqueryoperation.aspx?Operation=DeleteRow', contentType: 'application/json; charset=utf-8', data: {"Operation" :"DeleteRow", "TwitterId" : 1 }, dataType: 'json', cache: false, success: AjaxSucceeded, error: AjaxFailed }); |
或
1 2 3 4 5 6 7 8 9 | $.ajax({ type: 'POST', url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1', contentType: 'application/json; charset=utf-8', dataType: 'json', cache: false, success: AjaxSucceeded, error: AjaxFailed }); |
在JSON对象中使用双引号而不是单引号。我认为这将解决这个问题。