簡體   English   中英

Ajax - JSON不會僅在PATCH中發送

[英]Ajax - JSON doesnt get sent in PATCH only

我正在嘗試使用以下方法將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解決了它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM