1

我需要在搜索时列出项目。我不想在服务器端 php 脚本完成工作时使用某种加载标志、无限进度或其他任何东西,而是希望在服务器端找到结果后立即显示结果。

PHP 侧缝很容易执行一个假的 10 倍结果(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 中......

4

2 回答 2

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,不会改变这背后的想法。

于 2013-09-16T20:33:35.420 回答
1

你不能,你要么必须实现socket.io要么改用$.getScript

尝试这个 :

var s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'test.php';
$('head').append(s);
于 2013-09-08T20:19:41.797 回答