3

私はこの長いポーリングスクリプトを機能させようとしてきましたが、行き詰まり続けています。今回はサーバーへのajaxリクエストに問題があります。データを提供するphpスクリプト(ループとスリープを使用してロングポールを実行する)は完全に正常に機能しますが、私のjQueryスクリプトは機能しません。

これまで、通常の$.ajax()リクエストと$.post()スクリプトへのリクエストを使用してみましたが、そうするとスクリプト全体が停止します。スクリプトは実際には想定どおりに読み込まれますが、ページには読み込みが続くことが示されています(google chromeを使用すると、画面の下部に「待機中」バーが表示されます)。phpスクリプトで60秒間タイムアウトした後、データが見つからなかったため、jQueryスクリプトは「false」を受け取ります。次に、スクリプトはデータagianを要求することになっています。

私の質問は、ブラウザがバックグラウンドで何かをロードしていることを表示しないようにするにはどうすればよいですか?私のサーバーは共有サーバーであるため、サーバー自体に何かをインストールすることに関してはアクセスできません。したがって、これはjavascript(jQuery)とphpのみを使用して解決する必要があります。

編集:Internet Explorerでスクリプトをチェックアウトしたところ、スクリプトが読み込まれている兆候は見られないようですが、GoogleChromeではまだ問題があります

編集いくつかのコードを投稿する:

これは私のjavascriptファイルです:

if($("#interestboard"))
{
    var lasttime = $("#lasttime").val();
    var pollurl = $("#pollurl").val();
    lpStart();
}
function lpStart()
{
    $.ajax({
        type: "GET",
        url: pollurl+lasttime,
        async: true,
        cache: false,
        success:function(data)
        {
            alert(data);
        },
        error: function()
        {
            alert("Something went wrong");
        }
    });
}

もちろん、これは$(document).ready()

私のphpスクリプトは次のようなものです。

while(time()-$time<60)
    {
        $this->class = $class["id"];
        $this->orderBy("timestamp");
        $this->_extraConditions = "`timestamp`>'$lastTime' AND ";
        $result = $this->search();
        if($result)
            return $result;
        usleep(250000);
        clearstatcache();
    }

Firebugを(Google Chromeで)使用すると、リクエストが行われたことだけが表示され、コンソールのGET文字列の最後に通常の読み込みアイコンは表示されません。Firefoxでは、リクエストが保留中であること(読み込みアイコンが表示されていること)も表示されますが、少なくともブラウザはページが読み込まれているようには動作しません。

ありがとう...

4

1 に答える 1

3

ページの読み込み時にChromeAJAXのトップコメントを読むと、「ビジーカーソル」が残ります。これはGoogle Chrome固有のようであり、すべてのコンテンツが読み込まれるまで待ってからajax呼び出しを行う必要があります。

編集:ただの推奨事項-maby私は間違っています:サイトへの攻撃につながる可能性があるため、GETリクエストを使用してサイトで巨大で機密性の高い操作を行うべきではありません。高負荷のサイトを所有/ハッキングしている人は誰でも、非表示のiframeをページに挿入できるため、そのページにアクセスしたユーザーは、気付かないうちにGETリクエストを送信できます。サーバーがクラッシュしたり、害を及ぼしたりする可能性があります(何千ものリクエストがサーバ)。最近のほとんどのブラウザはクロスサイトPOSTリクエストを許可しないため、安全である必要があります。

編集2:スクリプトを中止した後もそのスクリプトがまだ機能している間はサイトが利用できないことについて:おそらくセッションが原因です。標準のセッション動作では、同じセッションを持つ1つのphpインスタンスのみが同時に実行されます。他のすべてのリクエストは、他のすべてのスクリプトでそのセッションが閉じられるまで待機します。スクリプトでセッションをできるだけ早く閉じるか、同じセッションで複数のリクエストを有効にするカスタムセッション処理を使用するか(おそらくこれは本当に醜いでしょう)、ユーザーがブラウザで中止するとすぐにsriptを閉じるためにユーザーの中止を検出する必要があります。

于 2011-06-22T08:09:17.890 に答える