3

私はjQueryを初めて使用し、現在維持されているHTTP 1.1接続ではなく、接続を閉じたプレーンなHTTP 1.0を使用してPOSTリクエストを作成したいと考えています。

以下は、投稿を行うボタンの onClick ハンドラです。

$( "#certGenBtn" ).click( function( event ) {
$.ajax({
  type: "POST",
  url: "http://localhost:9099/",
  data: { testVal : "data" },
  success: function( data ) {
              alert( "whoops" );
           },
  beforeSend: function( xhr ) {
                  xhr.setRequestHeader( "Connection", "close" );
              }
    });
});

サーバー側でダンプされる生の出力は次のとおりです。

POST / HTTP/1.1
Host: localhost:9099
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: */*
Accept-Language: en-ZA,en-GB;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/  
Content-Length: 12
Origin: http://localhost
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

testVal=data

Connection close ヘッダーは「無視」されており、接続はサーバーに対して開いたままであるため、最後の行testVal=dataはページをリロードしたときにのみ通過します (これは、ブラウザーによって接続が閉じられるためだと思います)。私が見逃しているのは非常に単純で愚かなものだと思いますが、ドキュメントには何も表示されません。

4

2 に答える 2

1
var xhr = $.ajax({
    type: "POST",
    url: "some.php",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});

//kill the request
xhr.abort()
于 2014-02-15T06:58:17.423 に答える
1

1) HTTP 1.1 仕様によるとConnection: close、有効なヘッダーです。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

beforeSend ではなく、headers キーで追加してみてはいかがでしょうか。

.ajax({

   ....
   headers: {Connection: close},

});

2) jquery ドキュメントでは、 beforeSend 関数に次の関数シグネチャを指定しています。

beforeSend 
Type: Function( jqXHR jqXHR, PlainObject settings )

そのため、jqXHR オブジェクトではなく設定オブジェクトにヘッダーを追加することもできます。

さて、私はあなたの元のコードと私の提案をテストしましたが、どれも成功しませんでした. XMLHttpRequest 仕様では Connection ヘッダーの設定が禁止されているようです。

setRequestHeader(header, value) メソッドは、次の手順を実行する必要があります。

ヘッダーが次のヘッダーのいずれかと大文字と小文字を区別しないで一致する場合は、これらの手順を終了します。

... 繋がり ...

上記のヘッダーは、ユーザーエージェントによって制御され、トランスポートのこれらの側面を制御できます。これにより、データの整合性がある程度保証されます。
http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method

于 2013-06-12T10:24:30.250 に答える