1

こんにちはまず私の悪い英語を申し訳ありません。私はすでにSOで検索しました。しかし、必要な正確な答えが得られませんでした。私の問題は、Ajax リクエストを同期する必要があることです。「 asynch : false 」を使用できることはわかっています。ただし、これによりブラウザがロックされます。Webにフォルダー ツリー (「タフェル ツリー」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 呼び出しのために読み込みに時間がかかりすぎます。時間がかかりすぎることは、私にとって大きな問題ではありません。ただし、すべてのリクエストが実行されるまでブラウザはロックされます。これを行う他の方法はありますか。

4

1 に答える 1

0

私はあなたが使用しているツリー ライブラリに精通していませんが、一般的に、これを解決する方法は、現在展開されているパスをブラウザー (ローカル ストレージ、Cookie、またはその他の場所) に保存することです。ページを更新すると、表示されているノードだけが読み込まれます。

ユーザーが現在パス 1/2/3/4 を見ているとします。そのパスをどこかに保存し、ページが再び読み込まれたときに、パスを分割してパスのコンポーネントを 1 つずつ追加することで、バックエンドから要求するパスのキューを作成します。

["one", "one/two", "one/two/three"]

次に、「1」の AJAX リクエストを送信し、結果が返ってきたら、ツリー内のそのノードを更新し、「1/2」のリクエストを送信します。そのリクエストが戻ってきたら、ツリーを更新し、「1/2/3」のリクエストを送信します。

設計に応じて、ツリーの残りの部分に非同期リクエストを追加することができます...

于 2013-03-05T05:58:39.500 に答える