Ajax - JSON不会仅在PATCH中发送

nkn*_*knj 10 javascript ajax jquery

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

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

我得到了No JSON object could be decoded.但是,当我使用PUTjson对象被发送.

它只适用于PATCH

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

vit*_*ilo 15

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

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

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

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

    new XMLHttpRequest().open('PATCH', '/'); //Illegal argument
    
    Run Code Online (Sandbox Code Playgroud)
  • 要解决此问题,您可以强制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();
        }
    });          
    
    Run Code Online (Sandbox Code Playgroud)


tur*_*nvh 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'
});
Run Code Online (Sandbox Code Playgroud)

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