小编典典

Ajax-仅在PATCH中不发送JSON

ajax

我正在尝试使用以下方法将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,即时通讯使用的应用程序是tastypie


阅读 326

收藏
2020-07-26

共1个答案

小编典典

首先,检查您是否使用了最新版本的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();
    }
    

    });

2020-07-26