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ます。ただしPUT、jsonオブジェクトを使用すると送信されます。

PATCHでのみ機能しません

バックエンドはDjango、アプリはtastypie

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の最新バージョンで機能しますが、他の回答で言及されている問題はまだ修正されていません。

于 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 に答える