2

在此处输入图像描述 在此处输入图像描述

我有一个简单的 AJAX 脚本,它假设调用 PHP 文件并取回数据。

window.addEvent('domready', function() {
    $('dbform').addEvent('submit', function(e) {
        new Event(e).stop();
        var intervalId =setInterval(function() 
        {
            var Ajax2 = new Request({
                url: '/tools/getdata.php',
                method: 'post',
                data: 'read=true',
                onComplete: function(response)
                {
                    $('results').set('html', response);
                }
            }).send();
        },1000);

        var postString = 'subbutton=' + $('subbutton').value;
        var Ajax = new Request({
            url: '/tools/getdata.php',
            method: 'post',
            data: postString,
            onRequest: function()
            {
                $('message').set('text', 'loading...');
            },
            onComplete: function(response)
            {
                $('message').set('text','completed');
                clearInterval(intervalId);
            },
            onFailure: function() 
            {
                $('message').set('text', 'ajax failed');
            }
        }).send();
    });
});

它提交的文件也是。

$object= new compare();
if(isset($_POST['subbutton'])=='Run')
{
    // This take about 5 minutes to complete
    $run=$object->do_compare();
}

if(isset($_POST['read'])=='true')
{
    /// in the mean time, the first ajax function is suppose to return data from here..while
    // the do_compare() function finish.
    // the problem is that it only return it once the do_compare() finish
    /// 
    echo 'read==true';
}

脚本工作正常,期望,当 Ajax 请求每隔一秒检查一次文件时,它不会返回任何东西$_POST['read'],直到$run=$object->do_compare();完成。

为什么这样做?我想要完成的是一个 Ajax 函数从 do_compare 函数获取数据,而另一个 ajax 函数也独立地从 getdata.php 文件中获取数据。

4

2 回答 2

2

问题在于:

if(isset($_POST['subbutton'])=='Run')

isset 返回布尔值 true 或 false,因此如果$_POST['subbutton']设置比它返回 true 并且由于 php 的弱类型系统,true == 'Run'因为'Run'计算结果为 true。利用

if(isset($_POST['subbutton']) && $_POST['subbutton'] === 'Run')

if(isset($_POST['read']) && $_POST['read'] === 'true')
于 2013-09-23T15:07:01.900 回答
0

您是否在 PHP AJAX 处理程序中使用会话?如果是这样,您的会话文件可能已被阻止。

第二:Javascript 在浏览器内部是单线程的(更多信息请参见 google)。

于 2013-09-23T18:07:29.013 回答