12

我正在尝试使用以下方法将 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. 然而,当我使用PUTjson 对象被发送。

它只对 PATCH 不起作用

后端是 Django,我使用的应用程序是 sweetpie

4

3 回答 3

17

首先,检查您是否使用最新版本的 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();
        }
    });          
    
于 2012-10-08T16:32:06.663 回答
15

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

$.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 上,但仍然不能解决其他回复中提到的 ie 问题。

于 2012-11-18T11:49:29.807 回答
2
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 解决它!

于 2012-07-12T22:55:20.123 回答