0

ExtJS を使用して Ajax リクエストをサーバー上の PHP ページに送信しています。パラメーターをクエリ文字列ではなく POST 変数として送信したいと考えています。

プロキシ サーバーの 1 つでキャッシュの問題が発生していたため、クエリ文字列にランダム トークンを含めました。

Ext.Ajax.request({
url: 'ajax.php?action=test&randToken=' + generateRandomToken(),
scope: this,
method: 'POST',
success: ajaxSuccess,
failure: ajaxFailure,
params:
{
    param1: 'test',
    param2: 'data',
}});

上記のコードは、ローカルで (Vista ボックスで) 実行すると機能し、Fiddler を使用してトラフィックをチェックすると、すべて正常に表示されます。

ただし、Ubuntu ステージング サーバー (Zend サーバーを実行) で実行すると、すべての ajax 要求が POST データをクエリ文字列にも入れます。

これの原因をどこから探し始めればよいかさえわかりません。ネットワーク上のプロキシか何かですか、それともステージング サーバーの設定ですか?

4

1 に答える 1

1

すべてのパラメータをPOSTに入れてみてください。POSTはキャッシュされないはずなので、キャッシュに問題はありません。

Ext.Ajax.request({
  url: 'ajax.php',
  scope: this,
  method: 'POST',
  success: ajaxSuccess,
  failure: ajaxFailure,
  params: {
    action: 'test',
    param1: 'test',
    param2: 'data'
  }
});

また、クエリ文字列のすべてのパラメータをGETとして渡してみてください。セキュリティが心配な場合は、POSTとGETの両方がHTTPを介して渡され、トラフィックがSSLで暗号化されていない場合は簡単に盗聴されることに注意してください。

Ext.Ajax.request({
  url: 'ajax.php?' + 
    Ext.urlEncode({
      action: 'test',
      randToken: generateRandomToken(),
      param1: 'test',
      param2: 'data'
    }),
  scope: this,
  method: 'GET',
  success: ajaxSuccess,
  failure: ajaxFailure
});

そして最後に、その末尾のコンマをparamsハッシュから削除してみてください。一部のブラウザー(IE)は、jsに末尾のコンマが残っている場合に適合します。

于 2009-11-27T11:26:08.450 に答える