嗨首先抱歉我的英语不好。我已经搜索过了。但我没有得到我需要的确切答案。 我的问题是我需要同步Ajax请求。我知道我们可以使用“ asynch:false ”。 但这会使浏览器锁定。我的网络中有一个文件夹树(我正在使用“ tafel tree ”js)。树节点是在运行时生成的。每一次 用户单击将向服务器发送请求的节点,并将该节点添加到树中。 但问题是如果通过单击 f5 刷新页面,那么我需要加载我之前选择的树结构。 我用“ asynch:false ”实现了它。但这会使浏览器太慢。
在这里我有什么
function loadPage() {
/* some other codes are here*/
/* here i call an ajax for get the inside folder list in correct order.(i am usig protoype)*/
new Ajax.Request(ajaxGetInsideFolderIdsUrl,
{
parameters: {branchId: CurrentSelectfolderId},
onSuccess: function(res) {
/* onSuccess i call another function*/
var brs = res.responseText.split(","); // branch ids in correct order.
syncFolder(brs)
}
}
function syncFolder(brs){
for(var i= 0 ; i < brs.length; i ++){
var tempbranch = tree.getBranchById(brs[i].getId());
selectAfterChange( tempbranch)
/*
selectAfterChange function is used for selecting current branch. calling "tafle tree" select() function in side it.
i just created an copy of "select()","_openPopulate()" functions used in "tafle tree" and modified it with "asynch : false ".and now its working fine.
*/
}
}
function selectAfterChange(brs){
brs.chk_select();
/* for selecting the branch (created a copy of current "select()" function used in "tafle tree" js
and modified it with "asynch : false "and now its working fine.) */
showList();// for listing items in side that folder (in another Ajax page).
}
我的问题是用户是否打开了长分支。 然后刷新页面,由于同步Ajax调用,加载将花费太多时间。 花太多时间对我来说不是一个大问题。但是在所有请求执行之前,浏览器都会被锁定。 还有其他办法吗?
答案 0 :(得分:0)
我不熟悉你正在使用的树库,但一般来说,你解决这个问题的方法是将当前扩展的路径存储在浏览器中(本地存储,或cookie,或任何地方) ),当您刷新页面时,只加载可见的节点。
假设用户当前正在查看路径一/二/三/四。您可以在某处保存该路径,然后当页面再次加载时,您可以通过拆分路径并逐个附加路径的组件来创建从后端请求的路径队列:
["one", "one/two", "one/two/three"]
然后发送“one”的AJAX请求,当你得到结果时,更新树中的那个节点,并发送“one / two”请求。当该请求返回时,更新树,并发送“一/二/三”的请求。
根据您的设计,您可以使用更多异步请求开始填充树的其余部分......