2

私はdivを持っています:

<div id="content"></div>

そして、ページがロードされると、私はを呼び出します.load()。このロードは完了するまでに約10分かかり、実行中にそのPHPファイルはLinuxのロードなど、実行ステータスを示す情報を返します。#contentこの情報を動的にdiv内に配置したいのです.load()が、実行の最後にのみ配置しています。誰かが私がこれをしてくれるのを手伝ってくれる?

.load()呼び出し:

$("#content").load("/admin/ajax/analyse.php");
4

3 に答える 3

3

jQueryのajaxインターフェースは、応答の進行状況の更新を取得する方法を提供しません(ブラウザーのネイティブXMLHttpRequestオブジェクトのスーパーセットであると主張している場合でも)。明らかに、このようなユースケースはjQuery開発者には考えられません。

ただし、、、およびは考えられるすべての要件をカバーしているため、onreadystatechangeメカニズムは提供されていません。successerrorcompletestatusCode

を直接使用することにより、イベントハンドラーXMLHttpRequestで応答の現在の進行状況を読み取ることができます。onreadystatechange

var xhr = new XMLHttpRequest();
xhr.open("GET", "/admin/ajax/analyse.php", true);
xhr.onreadystatechange = function receiveUpdate(e) {
    $("#content").html(this.responseText);
}
xhr.send();

これは、IE 10、Chrome、Firefoxなどのほとんどのブラウザの最新バージョンで機能します。

デモ:

于 2013-01-19T01:30:46.430 に答える
0

これに対処する方法はいくつかありますが、すべてサーバー側で変更する必要があります。1つの解決策(これが機能することを想像している方法に最も適していると思います)は、長いポーリングです。

PHPとjQueryを使用したロングポーリングについては、この質問を参照してください。

于 2013-01-18T22:14:48.750 に答える
0

これはあなたが洗い流さなければならないという考えです...

サーバー上で、

  1. ユーザーがURL#1をヒットします
  2. セッションがまだない場合は、セッションが開始されます。
  3. データを生成する非同期プロセスを開始します。
  4. データの一部が完成すると、キューに入れられます。もっと簡単に言えば、データをどこかにチャンクに入れます。メモリ内のキャッシュのデータベースである可能性があります。
  5. すべてのデータが非同期タスクによって生成されると、マジックストリングを使用してファイルの終わりの表示を送信します。

サーバー上でも:

  1. 同じユーザーがURL#2にアクセスします(セッション情報からわかります)
  2. キューの先頭からデータのチャンクを彼に渡します。
  3. 彼がURL#2に到達するたびに、あなたは彼にもう少しデータを与えます。
  4. ブラウザが最後にもう一度要求し、残っているのがファイルの終わりの表示だけである場合、サーバーはデータがなくなったことを示すHTTP結果コードを返すか、マジックストリングを返すことができます。

クライアント側では、

  1. URL#1に対してajaxリクエストを実行して、サーバーの生成を開始します。
  2. URL#2に対して繰り返しリクエストを発行します。
  3. すべての結果はページ要素に追加されるため、ユーザーは到着時に結果を確認できます。
  4. クライアントリクエストが「nomoredata」結果コード(または魔法のファイルの終わりの文字列)を返すと、すべてのデータがそこにあることを示す何かを画面に表示することで、ユーザーへの追加のデータとシグナルのリクエストを終了します。

それはあなたのために働くはずです。

于 2013-01-18T22:28:25.017 に答える