1

ajax ポストの受信者が次のように動作する場合:

// process/te_bulk.php

$jsonList = '[{"AV"},{"QT"}]';
echo $jsonList;

sleep ( 5 )              // or, continue curl request for jsonList variable 1

$jsonArray = '[{"1","15","JOG"},{"2","20","RUN"}]';
echo $jsonArray;

sleep ( 4 )              // or, continue curl request for jsonList variable 2

$jsonArray = '[{"1","25","SWIM"},{"2","30","BIKE"}]';
echo $jsonArray;

最初の試行 - XHR の読み込みが 5 秒間遅延し、両方の文字列が同時に追加され、結果として「無効な JSON」が発生します。

$.ajax({
  type: "POST",
  url: "process/te_bulk.php",
  contentType: "application/json; charset=utf-8",
  data: { user: "12345" }
}).success(function( msg ) {
  var string = jQuery.parseJSON(msg);
  alert( "Data Returned: "+string );
});

.post() または .ajax() は各エコーに個別に応答できますか? ページ process/te_bulk.php をブラウザーにロードすると、5 秒と 4 秒の遅延が発生します。つまり、te_bulk.php が処理を終了したときにすべてのデータを受け取るのではなく、データが利用可能になったときにページにデータを追加する方法です。

2 つの .ajax() 関数を用意します。1 つは最初の文字列を受け取り、必要に応じて $jsonArray データに対して 2 番目の関数を処理して呼び出します。

これが不可能な場合、取得したデータの「進行状況」インジケータを表示する別の簡単な方法はありますか?

4

2 に答える 2

1

エコーはクライアントに何も返さないため、上記のサンプル コードは目的の動作をしません。ページの一部を非同期でロードする場合は、各部分に個別の ajax 呼び出しを使用する必要があります。

リクエストの途中でバッファがクライアントにフラッシュされる可能性があるため、以下の Kevin のコメントを参照してください。

于 2013-04-08T15:04:22.750 に答える
0

Ajax は、readystate が 4 の場合にのみ「完了」状態に入ります。バッファーをフラッシュすると (既に返されたコンテンツがブラウザーに送信されます)、コンテンツはブラウザーに送信されますが、jQuery はそれを解析しません。 readystate が 4 になるまで

その最後の部分を念頭に置いて、それでもこれを追求したい場合は、responseText がフラッシュされているときに ajax リクエストからのコンテンツで更新されているかどうかを確認してください。

各レコードの後に​​バッファをフラッシュするには、php を更新する必要があります。

于 2013-04-08T15:21:39.923 に答える