私はこれを試していませんが、Prototype などの JS ライブラリを使用して出力の長さを決定し、それを最後の応答の長さと比較してから、適切な位置で文字列を切り取ってそれに応じて動作させることができます。
テストされていない例:
var lastLength;
Ajax.Request('/tail.php', {
onSuccess: function(data){
/* this is our callback and data.responseText will contain the raw response from the server */
var curLength=String(data.responseText).length;
if(curLength>lastLength) {
$('myDiv').insert(data.responseText.substr(lastLength)); // append the new part of the string to a DIV with id 'myDiv'
lastLength=curLength;
}
}
});
なんらかの理由でその解決策が満足できない場合や問題が発生する場合は、tail.php に生データ以外のものを送信させることを試みることができます。代わりに、JSON を使用して、データとともにバイト数を含めることができます。
仮定して
$tailOutput
を使用して、最新の出力が含まれています
echo json_encode(array(
'tailOutput' => substr($tailOutput, $_REQUEST['tailLength']),
'curLength' => strlen($tailOutput)
));
最後の長さ情報を含めてデータをクライアントに送り返し、それに応じて JS コードを適応させます。
var lastLength;
Ajax.Request('/tail.php', {
parameters: {
tailLength: lastLength
},
onSuccess: function(data){
var obj=data.responseText.evalJSON(); //convert to json object
$('myDiv').insert(obj.tailOutput);
lastLength=obj.curLength;
}
}
});