我有一个应用程序可以评估大量项目并为每个项目输出一个分数。
在我的php脚本中,我使用ob_start和ob_flush来处理每个评级的数据输出。如果我直接加载脚本,这很好用。但是当我尝试通过jquery使用.get时,整个内容加载然后被放入容器中,而不是逐步添加。
我想知道以下
答案 0 :(得分:2)
对于这类问题,我会采用这种方法:
ob_start()
和ob_flush()
的旧脚本保留给在浏览器中禁用javascript的用户。div
,然后将内容加载到div
。setTimeout
连续调用AJAX代码,然后在达到某个条件后(例如,空响应),您可以使用setTimeout
删除clearTimeout
。每个AJAX请求都需要有一个偏移参数,因此它将从上一次AJAX调用中获取内容。收到响应后,增加下一个AJAX调用的偏移量。您可以使用全局变量。您可以使用一个简单的全局变量来阻止AJAX请求在最后一个AJAX仍在等待响应时运行,以防止竞争条件。示例代码:
//lock variable var is_running = FALSE; //offset start with 0 var offset = 0; function load_content($) { //check lock if (! is_running) { //lock is_running = true; //do AJAX $.get(URL, { PARAM }, function(resp){ //put data to 'div' //... //if empty, then call clearTimeout //... //increase offset here offset = offset + NUM_ITEM_FETCHED //release lock is_running = false; }); } }
您必须注意使用AJAX调用时必须注意,必须手动确定响应,因为ob_start
和ob_flush
在此方案中无效。
我希望这可以帮助您创建自己的代码。
答案 1 :(得分:1)
当整个页面加载完成后,Jquery将从ajax调用中获得成功状态..所以无论你在php中做什么都不会返回到调用页面,直到整个过程完成..(ajax是一个-send / one-receive system)
您需要使系统复杂化以执行您想要的操作..
例如..
答案 2 :(得分:1)
我有一个类似的问题,我想要一个PHP脚本发送一系列电子邮件并更新jquery页面,说“发送23/50”。
我最终做的是设置php脚本来一次处理一个项目。这可能也适用于您的情况。你有没有jquery将某种项目标识符传递给只处理那一项的php脚本?然后在回调中,您可以将该项目的数据放在页面中,也可以为下一个项目创建新的ajax请求。换句话说,每个回调都会为下一个项目创建一个新请求,直到整个项目列表循环完成。
您怎么看?
-DLH