大家好.
我有一个页面通过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();
?>
我想要一些我可以在它称为的页面中捕捉到的信息,例如,它在某个时间到达了哪些物品…这可能吗?还是我必须实现某种方法,以便每隔30毫秒就对插入数据库中的项目进行计数?
解决方法:
如果您需要一种快速且肮脏的解决方案-只需在每次插入后添加回显,并确保它包含换行符并且其大小足以刷新php / apache中的缓存(4KB即可).例如,使用此方法:
function logProgress($message)
{
echo($messsage);
for ($i=0; $i<4096; $i++)
{
echo(" ");
}
echo("\n");
}
如果使用gzip,那么这还不够,还需要使用其他随机的空白字符.
如果要向某些用户显示进度,则可以在后台运行插入脚本,将状态保存在某些数据库表中,然后从其他脚本轮询它.
可以使用fork功能(卷曲)来运行后台作业,或者如果您需要好的作业管理器,请尝试gearman.
另请注意,如果您使用会话,则不能同时运行2个脚本-一个将等待另一个脚本完成.如果您知道将不再在脚本中使用会话,则可以调用session_close()摆脱此锁定问题.
标签:ajax,php,jquery 来源: https://codeday.me/bug/20191122/2056445.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。