ループを開始するPHPスクリプトにAJAXリクエストを行うjavascriptがあります。このループは、データをJavaScriptに返します。 PHPスクリプトの配列をjavascriptに送り返すことができますが、これは正しく動作していないようです。JSON経由のAJAXリクエストからPHP配列を取得するにはどうすればいいですか?
主に2つ(またはそれ以上)の配列を同時に返すことがあるためです。 これはどのように機能しますか? JSONのヘルプを検索しようとしましたが、私の問題を説明したものは見つかりませんでした。私のHTTPレスポンス方式で
:
if(http.readyState == 3)
{
console.log(http.responseText);
var toBeEvaled = "(" + http.responseText + ")";
console.log(toBeEvaled);
var textout = eval(toBeEvaled);
console.log(textout.name);
}
私のPHPは次のようになります。
echo json_encode(array('type' => 1, 'name' => $stringVar, 'id' => $id));
ログ1は次のようになります。
{"type":1,"name":"String1","id":"1000004"}
{"type":1,"name":"String2","id":"60220"}
ご覧のとおり、2つの配列がありますその中に もう1つの問題は、新しい配列がhttp.responseTextに追加されるため、何らかの形で私がすでに処理したものを取り除き、まだ処理していない新しいものだけを処理できるようにする必要があるということです。
例、2のログを記録すると、次のようになります。
{"type":1,"name":"String1","id":"1000004"}
{"type":1,"name":"String2","id":"60220"}
{"type":1,"name":"String3","id":"5743636"}
{"type":1,"name":"String4","id":"8555983"}
{"type":1,"name":"String5","id":"7732"}
{"type":1,"name":"String6","id":"92257"}
任意のアイデア?
::::
解決済み!
echo json_encode(array('type' => 1, 'name' => $stringVar, 'id' => $id)) . '%#%';
お知らせ終わりには '%#の%':次..
PHPをしました。
Javascriptを:
var lastResponse = '';
function useHttpResponse()
{
if(http.readyState == 3)
{
// Get the original response before we edit it
var originalResponse = http.responseText;
// Replace the found last response in our original response with nothing(basically editing out the last response)
var newResponse = originalResponse.replace(lastResponse, '');
// Add our new response to the last response
lastResponse += newResponse;
var responses = newResponse.split("%#%");
$.each(responses, function(index, value){
if(value != '')
{
var textout = eval('(' + value + ')');
console.log('Name: ' + textout.name + ', ID: ' + textout.id);
}
});
}
}
は素晴らしい仕事!あなたは2次元配列を持っているので、:)
は、残念ながら、メインPHPループを実行するのに約7分かかり、私はそれを希望有効です7分後に1つの大きな「チャンク」の代わりにデータを連続的に返送すること。いずれにしても解決策はありますか? – Tanax
残念ながら、データを継続的に返送したい場合は、おそらくjsonが行く方法ではありません。これは、私が知る限り、どのような種類の「進行中のストリーム」フォーマットも持たない、非常に構造化された設定です。 js(つまり、---- \ n $ jsondata \ n ----)を使用して読み込むことのできるカスタムフォーマットを使用する方がよい場合があります。最後の--- \ n(data)\ n ----)、各チャンクの内容をデコードします。それは意味をなさないでしょうか? – Stephen
私はそれを解決しました! :)最初の投稿を編集して、悪い方法であればコメントしてください。しかし、それは完全に動作しています。 – Tanax