Ajax – JSON不会仅在PATCH中发送

我试图使用以下方法将json数据从客户端发送到我的服务器:

$.ajax({ url : 'http://127.0.0.1:8001/api/v1/pulse/7/', data : data, type : 'PATCH', contentType : 'application/json' )}; 

我得到一个No JSON object could be decoded 。 但是,当我使用PUT ,json对象被发送。

它只适用于PATCH

后端是Django,使用的应用程序是tastypie

首先,检查您是否使用最新版本的jQuery库:

  • 旧版本直接限制未知方法(PATCH是新方法)。
  • 我已经测试了jQuery 1.7 – PATCH方法没有问题。

其次,并非所有浏览器都支持使用XMLHttpRequest的PATCH方法:

  • 就像,IE 7,8(9+工作正常)有XMLHttpRequest,但它在PATCH上抛出一个错误:

     new XMLHttpRequest().open('PATCH', '/'); //Illegal argument 
  • 要解决这个问题,你可以强制jQuery使用旧的专有ActiveXObject xhr,如下所示:

     $.ajax({ url : 'http://127.0.0.1:8001/api/v1/pulse/7/', data : data, type : 'PATCH', contentType : 'application/json', xhr: function() { return window.XMLHttpRequest == null || new window.XMLHttpRequest().addEventListener == null ? new window.ActiveXObject("Microsoft.XMLHTTP") : $.ajaxSettings.xhr(); } }); 

有点晚了,但是当我收到这个错误时,这对我有用:

 $.ajax({ url : 'http://127.0.0.1:8001/api/v1/pulse/7/', data : JSON.stringify(data), type : 'PATCH', contentType : 'application/json', processData: false, dataType: 'json' )}; 

自己序列化对象而不是让jQuery这样做似乎有所帮助。 这适用于最新版本的Chrome,但仍然无法修复其他响应中提到的问题。

 var request = new XMLHttpRequest(); request.open('PATCH', 'http://127.0.0.1:8001/api/v1/pulse/6/', false); request.setRequestHeader("Content-type","application/json"); request.send('{"isActive": 1}'); 

使用XMLHttpRequest解决它!