我需要在搜索时列出项目。 在服务器端PHP脚本完成它的工作时,我不想使用某种加载标志,无限进度或其他任何东西,我希望在服务器端找到它们后立即显示结果。
PHP侧接缝非常容易执行假的10x结果(server.php):
header( 'Content-type: text/html; charset=utf-8' );
$i = 0;
while($i < 10)
{
?>
$('#resultZone-13').append('<div class="fileline">someresult</div>');
<?
flush();ob_flush();
usleep(200000); //0,2s
$i++;
}
客户端,我希望getScript可以工作,但事实并非如此,这就是我所拥有的:
$.post('server.php',{}, function(data)
{
},"script");
但是这个组合在执行10个jquery命令之前等待服务器端脚本完全完成。如何让JQuery在收到命令后立即执行命令?
我唯一的想法就是加载一个屏幕外的iframe并要求加载这个iframe中的server.php页面,但是,我被困在这个iframe中......
答案 0 :(得分:1)
您不能,您必须实施socket.io或使用$.getScript。
试试这个:
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'test.php';
$('head').append(s);
答案 1 :(得分:1)
好的,我休息了几天后才开始工作..(我是新爸爸!) 基本上这是做到这一点的方法:
在文档上创建一个不可见的iframe,并在其中加载远程php文件。这个php文件可以将一些javascript内容刷新到这个iframe,这是我发现让它按顺序显示它的唯一方法。
例如,我运行了这个测试:
<?
header( 'Content-type: text/html; charset=utf-8' );
echo '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>';
$i = 0;
while($i < 10)
{
?>
<script type="text/javascript">
$(window.parent.document).find('#subfolder13').append('<div class="folderline"><div class="closedfolder" style="margin-left:48px;"></div>Pecq</div>')
</script>
<?
flush();ob_flush();
usleep(200000); //0,2s
$i++;
}
?>
我不关心开头的繁重查询负载,因为这是与调用者帧完全相同的文件,因此在99%的情况下,这个文件是新缓存的。如果真的需要这可能是普通的javascript,不会改变这背后的想法。