2013-12-11 210 views
0

我正在用PLAY Framework 2.2.1構建搜索引擎,並在列出結果時遇到問題。搜索結果存儲在框架提供的緩存中,可以使用唯一標識進行訪問。我不希望結果一次顯示出來,所以結果列表通過ajax以塊形式提取。 結果站點加載後的第一部分,每次發生某個滾動事件時其餘部分都會被加載。如何防止javascript中的ajax函數一次執行多次

現在的問題是,有些結果中列出多次和警報消息 告訴我該功能next_results有時候會與可變POS兩次以上相同的值執行。 爲了防止這個問題,我使用處理變量,但這似乎不能正常工作。

var processing = false; 
var not_finished = true; 
var pos = 0; 
function next_results(uuid, result_size){ 
    alert("input\n" + result_size + " result_size\ncurrent_position" + pos); 

    jsRoutes.controllers.Application.getResults(uuid, pos, result_size).ajax({ 
     success : function(data) { 
       var len = data.length; 
//    alert("input\n" + result_size + " result_size\ncurrent_position" + pos + "\n result_length" + len); 
       pos = pos + len; 
       if (len == 0){ 
        not_finished = false; 
       } else { 
        for (var i = 0; i < len; i++) { 
         var result= data[i]; 
         $('#results').append(result.string); 
        }; 
       } 
      } 
    }); 
} 

var uuid; 
function set_uuid (x){ 
    uuid = x; 
} 


$(document).ready(function(){ 
    //initial 
    if (!processing){ 
     processing = true; 
     next_results(uuid, 10); 
     processing = false; 
    } 

    $(document).scroll(function(e){ 

     if (processing) 
      return false; 

     if (not_finished && $(window).scrollTop() >= $(document).height() - $(window).height() - 300){ 
      processing = true; 
      next_results(uuid, 2); 
      processing = false; 
     } 
    }); 
}); 

獨有的ID是設置在(通過斯卡拉)html代碼:

<script>set_uuid('@uuid');</script> 
+0

警惕JS調試?你的console.log(obj)被綁架了嗎? – biesior

+0

感謝您的建議,biesior,我很新的web開發。你能回答我的問題嗎? –

+0

好運! ;) – biesior

回答

2
 next_results(uuid, 2); 
     processing = false; <-- WRONG 

你需要做的是在成功的功能

success : function(data) { 
    ... 
    ...   
    processing = false; 
} 
+0

我對web開發很新穎。你能給我一個解釋嗎? –

+0

似乎工作。非常簡單的解決方案:-) –

+0

我怎樣才能最初執行next_results 3或4次?當寫入時(!處理){處理=真; next_results(uuid,2); processing = true; next_results(uuid,2); processing = true; next_results(uuid,2); }它返回相同的兩個結果的3倍 –