2011-12-05 21 views
1

私はajax応答にいくつかの問題があります。すべてが大丈夫ですが、私はいくつかの奇妙な行動を取っています。 私はajaxベースのチャットを作っています。だから、私は、ajaxリクエストレスポンスを使用して、その作業を行います。私は2つのポーリング関数を使用し始めたが、応答は複数回取得されることがありますが、正常に動作しています。 具体的には、私はメッセージポーリングのための1つのajaxパッケージと、ユーザーリストポーリングのための1つのajaxパッケージを送信します。両方とも定期的に送信されます!さらに、それらは、ほぼ同じ時間に同じ頻度で送信されます。 リクエストに複数の応答が返されることがあります。すべてのパッケージにタイムスタンプがあり、それらはサーバー側に記録されます。サーバー上では、パッケージは一度しか入っていません(私はロギングに基づいており、同時に複数のブラウザーを使用しています)。ブラウザは約3〜4回の応答を行います。すべてのメッセージは、同じタイムスタンプで完全に同じです。これは、通常、ブラウザに負荷がかかる場合に発生します。 私はヘッダーのキャッシュを無効にしようとしましたが、あまり役に立ちません。 問題に関する情報や考え方をお手伝いしてください。1つのリクエストに対して複数のajax応答を持つ

+0

コードを表示してください。 – Sedz

答えて

1

なぜ2つのリクエストを使用するのですか?それらを1つの「何か新しいものに」結合してください。両方の応答を同時に返信することができます。 Ajaxのレスポンスハンドラ(仮定jqueryの)で、クライアントサイドスクリプトで、その後

$data = array(
    'user_query' => array(
     'status' => false // nothing new 
    ), 
    'mesage_query' => array(
     'status' => true // got some new messages 
     'messages' => array (
      0 => array(... new message #1 data ...), 
      1 => array(... new message #2 data ...) 
      etc... 
     ) 
    ) 
); 
echo json_encode($data) 

と:あなたはJSONレスポンスに任意のデータ構造を埋め込むことができ、次のように行うのは簡単だろう

$.ajax(blah blah blah 
    .... 
    success: function(data) { 
     if (data['messages'].status) { 
       show_new_messages(data['messages']); 
     } 
     if (data['user_query'].status) { 
       show_new_users(data['user_query']); 
     } 
    } 
}); 
+0

こんにちは! これは私の問題を解決したようです。私はXMLと通常のjavascriptを使用しているので、少し時間がかかりました。私はJSONを学ぶことが有益だと思います。通常のAjaxレスポンスでは、私が知る限り、配列は許されません。 – Zulde

+0

json = javascriptオブジェクト表記。 'x = blah blah blah'とすると、jsonは' blah blah blah'部分です。 PHPでは、json_encodeを使ってそれを生成することができます(そして、jsonをjson_decodeで元のPHPデータに変換する)。 「学ぶ」ことは何もありません.Javascriptと他の言語との間でデータ構造を伝達する単なる方法です。 –

+0

私はそれを知りませんでした。 提案したコードを書き直しましたが、完全には機能しません。時々同じ問題が起きている。同じ応答が複数回処理されます... – Zulde

関連する問題