如何使jQuery解析我的错误响应表示为有效的json?

前端之家收集整理的这篇文章主要介绍了如何使jQuery解析我的错误响应表示为有效的json?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的代码
$.ajax({
        url: "/api/invoice/" + newInvoice._id,type: 'PUT',data: JSON.stringify(newInvoice),dataType: 'json',contentType: "application/json; charset=utf-8"
      })
        .success(function () {
          $('#statusLine').text('Successfully submitted invoice {0}. Click here to dismiss.'.format(newInvoice._id));
        })
        .error(function (err) {
          alert(err);
        });

请求:

PUT http://localhost:8000/api/invoice/16211 HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 770
Origin: http://localhost:8000
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML,like Gecko) Chrome/20.0.1132.57 Safari/536.11
Content-Type: application/json; charset=UTF-8
Accept: application/json,text/javascript,*/*; q=0.01
Referer: http://localhost:8000/invoice.html?id=16211
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"items":[{"id":...

请求体实际上是一个有效的json,为简洁起见,我刚刚截断它.

响应:

HTTP/1.1 409 Conflict
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 1386
ETag: 250542419
Connection: keep-alive

{
  "msg": "Cannot update the invoice #16211,because it has already been updated by someone else.","invoice": {
    "items": [
      {...

再次,响应是一个完全有效的json,为了简洁而被截短.

如预期的那样,错误处理程序用err对象调用.但是,我怎么能忍住被解析的json?当然,我可以检查一下响应的内容类型是json,然后自己解析err.responseText,但是jQuery ajax是不是应该为我做的?我的意思是,当我从服务器获取对象时,它对我的​​$.get查询是这样做的.

我失踪了什么

编辑

这是https://stackoverflow.com/a/12310751/80002的修正:

做请求:

var ajax = $.ajax(...

处理错误响应:

var res,ct = ajax.getResponseHeader("content-type") || '';
if (ct.indexOf('json') > -1) {
  res = $.parseJSON(err.responseText);
  // process the response here
}

解决方法

对于非2001 HTTP status code错误消息,内容将不会被jQuery解析.如果您真的不希望自己将返回的结果解析为JSON,则必须返回HTTP状态200并使用success(done)回调.

这是一个很好的迹象,你正在使用(从你的例子)HTTP代码409,我想你应该继续这样做 – 只需咬一下子弹,并在你的错误处理程序中手动解析JSON.如果解析失败,还有其他一些问题(例如临时网络故障),但是这将允许您构建一个可用于您(可能还有其他人)可以消耗的API,而无需在成功函数中构建太多的错误检查.

保持成功获得快乐的结果,并为不愉快的结果提供错误.

1技术上任何2xx状态都应该被认为是成功的; in jQuery (status >= 200 && status < 300 || status === 304) counts as something successful.

猜你在找的jQuery相关文章