引子:xajax是一个开源的PHP类库,它能够让你黏合HTML、CSS、Javascrīpt和PHP,轻而易举的开发功能强大、基于WEB的AJAX应用软件. 使用xajax开发的应用软件,无需重新调入页面,就能够异步调用服务器端的PHP函数和更新内容。

xajax具体的用法不说了,直接说问题:想做一个页面的刷新效果,在获取数据过程中提示用户“正在获取数据”,数据获取完毕后,再将提示语替换成实际的数据,很简单,用xajax做两个PHP函数:

引用自 function show_loading()
{
...
$objResponse->assign("my_text", "innerHTML", "正在获取数据");
...
}

function show_data()
{
...
获取数据$data
$objResponse->assign("my_text", "innerHTML", $data);
...
}


再用JavaScript调用
引用自 xajax_show_loading();
xajax_show_data();

测试发现,大多数情况,都可以得到想要的结果,但是偶尔会出现一直是“正在获取数据”,无法展现数据的问题。检查发现这种情况数据是获取成功的,进一步debug发现是由于先调用的函数不一定先执行造成的,也就是show_data成功展示了数据,但又被执行较慢的show_loading用“正在获取数据”覆盖了本该显示数据,导致看起来像是获取数据失败,执行出错或卡死的感觉。

最初用了个笨办法,延缓获取数据和展示的行为,JavaScript改为
引用自 xajax_show_loading();
setTimeout(xajax_show_data(), 200);

也能达到效果,但是方法很撮。。。


最后翻了xajax的文档,发现可以call或者script调用JavaScript,于是改为
引用自 function show_data()
{
...
$objResponse->assign("my_text", "innerHTML", "正在获取数据");
$objResponse->script("xajax_update_data()");
...
}

function update_data()
{
...
获取数据$data
$objResponse->assign("my_text", "innerHTML", $data);
...
}


JavaScript改为
引用自 xajax_show_data();


这样就可以确保先执行show_data更新等待提示语完成后,再执行update_data展现数据了。解决~~!

标签: ,
发表评论   请注意:本站已经启用评论审核机制,审核通过才能显示!
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称 *   
网址   电邮   [注册]
               

验证码 不区分大小写