1

チャットアプリケーションを作成していて、最初のチャット呼び出しで後続のすべてのAJAX呼び出しの設定を取得したいと考えています。

デフォルトのjQueryAJAX設定を設定しました。

jQ.ajaxSetup({
  url : 'chat.php',
  contentType: 'application/json'
  dataType : 'json',
  type : 'post'
});

次に、特定のチャットに接続するためのデータを含むJSONオブジェクトを返すアクションを渡します。

jQ.ajax({
  data: {
    'action' : 'connect'
  },
  success: function (data) {
    if (data.success) {
    // set user ID and chat ID for all subsequent ajax calls
      if (data.partner) {
      // start fetching data to listen for messages
      } else {
      // keep checking for partner
      }
    } else {
    //  chat connect failed
    }
  }
});

チャットが作成され、ユーザーがチャットパートナーに接続している場合、0.2秒ごとに次のようにサーバーからデータをフェッチします。

setTimeout(fetchData, 200);
function fetchData(){
  jQ.ajax({
    data: {
      'action' : 'fetch'
    },
    success: function (data) {
      if (data.success) {
        // update messages
      }
      setTimeout(fetchData, 200);
  });
}

また、データを投稿してチャットから切断するAJAX関数もあります。基本的に、これらはすべて、最初の「接続」アクションで設定されたものと同じチャットクレデンシャルを持っている必要があります。

これを達成するための最良の方法は何でしょうか?

4

2 に答える 2

1

グローバル スコープの資格情報を含むオブジェクトを作成し、必要に応じてアクションで拡張します。

var credentials = {};

そのオブジェクトを最初の ajax リクエストで更新すると、後続のリクエストは単純にオブジェクトに追加されます。

credentials.action = "fetch";

...
data: credentials,
...

アクション以上のものを追加しない限り、実際に拡張する必要はありません。それ以外の場合は、次のように拡張します。

data: $.extend({},credentials,{ action: "fetch", foo: "bar" }),
于 2012-06-29T21:40:30.963 に答える
0

関数に JSON オブジェクトをフィードしていることを思い出してくださいajax

次のように、設定を変数に保存できます。

var ajax_settings = {
    data: { ... },
    success: function(data) { ... },
};

そして、それを ajax 呼び出しで使用します。

$.ajax(ajax_settings);

接続後、または必要に応じて変数を変更しajax_settingsます。

于 2012-06-29T21:26:50.020 に答える