30

GET メソッドを使用して json オブジェクトを送信しようとしています。私のコード:

$.ajax({
           url: "/api/endpoint",
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

ただし、受信したヘッダーの「Content-Length」がゼロに設定されているため、サーバー上の json パーサーはコンテンツを読み取りません。

コンテンツの長さヘッダーを設定しようとしましたが、サーバーにはまだゼロとして表示されます。

$.ajax({
           url: "/api/endpoint",
           headers: {"CONTENT_LENGTH",JSON.stringify({"sort":"date"}).length},
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

これを機能させる方法はありますか?GET リクエストでなければなりません。

4

4 に答える 4

32

GETリクエスト(少なくとも通常)にはメッセージ本文がありません。ドキュメントに記載されているように、jQueryはdataURLパラメータにGETリクエストを追加します。sortサーバーアプリケーションを使用して、そこからパラメーターを読み取ることができるはずです。

ところで、ヘッダーを設定できるユーザーエージェントはContent-Lengthありません。送信されたデータに応じて自動的に設定されます(実行される必要があります)。

于 2012-06-08T11:55:48.000 に答える
22

少し間違っているところがいくつかあります。

  • CONTENT_LENGTHそうではありませんContent-Length
  • Content-Lengthヘッダーを設定しないでください。ブラウザが設定します。
  • Get リクエストの content-length = 0。

以下のようなものがうまくいくはずです:

$.ajax({
     url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})),
     type: "GET",
     ...
});
于 2012-06-13T14:12:13.820 に答える
5

次のようなURLのGETパラメーターにはJSON.stringifyを使用する必要があると思います。

$.ajax({
           url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}),
           type: "GET",
           contentType: "application/json",
           dataType: "json",
           ...
于 2012-06-08T12:04:38.307 に答える
4

Bergi が述べたように、データは によってjQuery.ajax()リクエスト パラメータに変換されます。jQuery 1.7.2 から:

// Determine if request has content
s.hasContent = !rnoContent.test( s.type );    --> false when s.type == "GET'

...

if ( !s.hasContent ) {
    // If data is available, append data to url
    if ( s.data ) {
        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
        // #9682: remove data so that it's not used in an eventual retry
        delete s.data;
    }
于 2012-06-13T14:03:25.017 に答える