我没有尝试过,但是也许您可以使用诸如 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;
}
}
});