ajax调用如何在PHP长时间执行期间检索部分结果

ajax调用如何在PHP长时间执行期间检索部分结果,php,jquery,ajax,Php,Jquery,Ajax,大家好 我有一个通过AJAX调用脚本的页面,该脚本调用prestashop Web服务,并且一次必须插入几个项目。我的问题是,脚本在大多数情况下似乎“冻结”,然后在2或3分钟后,开始打印结果,并从结束后继续。我想做的是每次插入一个项目时从脚本中检索一些内容,而不是“缓冲”数百个结果,然后一次性查看所有结果 这就是我正在使用的代码(去掉了不必要的部分) <?php function PS_new_product(all product attributes) { global $we

大家好

我有一个通过AJAX调用脚本的页面,该脚本调用prestashop Web服务,并且一次必须插入几个项目。我的问题是,脚本在大多数情况下似乎“冻结”,然后在2或3分钟后,开始打印结果,并从结束后继续。我想做的是每次插入一个项目时从脚本中检索一些内容,而不是“缓冲”数百个结果,然后一次性查看所有结果

这就是我正在使用的代码(去掉了不必要的部分)

<?php
function PS_new_product(all product attributes) {
    global $webService;

    try {

        $opt = array('resource' => 'products');
        $opt['postXml'] = $xml -> asXML();
        $xml = $webService -> add($opt); //this should return each product state (if it's inserted or not)
        return true;
    } catch (PrestaShopWebserviceException $ex) {

        return false;
    }

}

function inserisciProdottiRAW(){
    set_time_limit(30); 

    $sql_prodotti = "SELECT everything i need to import";

    if ($prodotti = mysql_query($sql_prodotti)) {

        while ($row = mysql_fetch_assoc($prodotti)){

            $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
            $opt = array('resource' => 'products');
            $opt['filter[reference]'] ="[".$row["modello"]."]";     
            $xml = $webService->get($opt);
            $prodotto = $xml->children()->children();

            if ($prodotto->product[@id] == ""){
            PS_new_product(/*all product attributes*/)
            }
        }   
    }

echo "ok";
}

inserisciProdottiRAW();
?>

如果您需要一个快速而肮脏的解决方案,只需在每次插入后包含一个echo,并确保它包含新行,并且足够大,可以刷新php/apache中的缓存(4KB就可以了)。例如,使用此方法:

function logProgress($message)
{
    echo($messsage);
    for ($i=0; $i<4096; $i++)
    {
        echo(" ");
    }
    echo("\n");
}
功能日志进度($message)
{
echo($messsage);

对于($i=0;$iPerhaps),您可以在实际放入项目的操作上调用一个脚本并记录它,而不是等待AJAX响应?不确定您是否拥有控制权,或者这是一个您正在侦听的外部服务。您的意思是:每次插入项目时,我都会在数据库中添加一行(或文件中的一行)然后我每10秒检查一次数据库(文件)?是的,我可以这样做,我可以完全控制在数据库中插入项目的脚本