2012-03-21 12 views
1

データパラメータを渡さないと、jQueryでPUTおよびPOST ajax CORSリクエストに異常な問題が発生しています。jQuery PUT/POSTデータ引数なしのajax CORSリクエスト

私はサーバでCORSを有効にしました。ヘッダを設定しました。私は、たとえば行うときすべてが正常に動作します:

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT" 
}); 

注これはのみ発生していること:私はdataパラメータを設定せずに、同じ要求を行う際に

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT", 
    data: {foo:"bar"} 
}); 

しかし、Firefoxはこれまでに、AJAXを掲示せずに返します。 POSTメソッドおよびPUTメソッドの場合、要求に完全なURLが指定され、httpデータパラメータが指定されていない場合。また、URLがページ自体と同じドメインにある場合(CORSは必要ありません)にも発生します。完全なURLの代わりに、URLにパスを指定するだけでは起こりません。

パラメータを渡さずにPOST/PUTを実行する手がかり(私のサーバは '偽の'パラメータを受け付けません)。

+0

それはこのようなものを使用することによって回避することができますか?設定データ:nullはリクエストを送信しますか?実際のリクエスト/レスポンスヘッダを取得するためにWiresharkを使用できますか? – monsur

+0

要求は一切送信されていません。即座に戻ります。私はこれがマルチパート/フォームデータ文字列を作成する関数のバグかもしれないと考えています。 – Jeroen

答えて

5

データがポストされていないときにクロスドメインのajaxリクエストで 'multipart/form-data'エンコーダを呼び出すと、jQueryのバグです。あなたが設定されているヘッダをCORS

if(jQuery.isEmptyObject(mydata)){ 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     contentType: 'application/x-www-form-urlencoded' 
    }); 
} else { 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     data: mydata 
    }); 
} 
+0

ありがとうございます。私はこれを見てまで、「405」エラー(メソッドが許可されていません)を得ていましたが、一部のブラウザでのみでした。私のためにそれを修正した。 – quilkin

関連する問題