2011-03-22 66 views
0

我試圖創建一個循環,每次通過$.post和完成後檢索另一個網頁的內容,做下一個頁面,直到頁面上的元素顯示爲0的結果。jQuery的帖子在一個循環中,轟然瀏覽器

function scrapeIt() { 
    $(".currentPage").html("Current Page: " + page); 
    $.post("scrapePosts.aspx", { page: page, search: keyword }, function (data) { 
     $(".status").html(data); 
     if ($("#count").html() == "10") { 
      scrapeIt(); 
     } else { 
      alert("Stopping..."); 
     } 
    }); 
    page++; 
} 

$(document).ready(function() { 
    var page = 1; 
    var keyword; 
    var stillGettingResults = true; 

    $("#go").click(function() { //Start Button 
     keyword = $("#keyword").val(); // Textbox 
     $(".status").html("Loading..."); 
     scrapeIt(); 
    }); 
}); 

的想法是爲scrapeIt()功能再次打電話給自己,但只有當它已經完成了POST請求。它似乎只是凍結。

+0

我不明白這一點?是否應該每次覆蓋'$(「。status」)?你在哪裏匹配'$(「#count」)'?它是'data'裏面的一些元素。 – Zlatev 2011-03-22 07:57:12

+0

是的,count是數據中div的ID。這只是一個UI的事情。看到進展。對我的問題真的不適應。爲清楚起見,應該刪除它。 – gunwin 2011-03-27 22:27:41

回答

3

var page = 1var keyword都應該在全局範圍內聲明的,否則他們在function scrapeIt()undefined

由於沒有pagekeyword作爲發佈請求的一部分發送,因此您的頁面可能會凍結,並且服務器可能無法理解請求。

+0

你的權利!謝謝! – gunwin 2011-03-22 08:08:17

0

看到setTimeout()$.post是不是異步我猜不斷呼籲將凍結瀏覽器線程

+0

我認爲,如果我只在成功部分再次調用函數,它只會在完成時觸發,因此一次只能執行一次。 – gunwin 2011-03-22 07:57:01

+0

你認爲這只是一個猜測需要多長時間才能完成的情況嗎? – gunwin 2011-03-22 07:57:22

+0

是它被稱爲只有一次,但它使主線程忙,不讓它做任何UI更新任務,而不是調用你的方法異步將有助於疏通主線程 – yasirmturk 2011-03-22 08:06:39

0

由於遞歸頁面始終爲零。 您需要在post回調中遞增頁面變量,而不是在scrapeIt結束時。

$.post("scrapePosts.aspx", { page: page, search: keyword }, function (data) { 
     page++; 
     $(".status").html(data); 
     if ($("#count").html() == "10") { 
      scrapeIt(); 
     } else { 
      alert("Stopping..."); 
     } 
+0

我會同意,最好是內增加'page'後回調,但我認爲它不會影響當前的代碼。 – 2011-03-22 07:56:36

+0

LOL沒有這個頁面將始終爲零 – 2011-03-22 07:57:41

+0

我做這個它仍然凍結。儘管如此,有意義。 – gunwin 2011-03-22 07:58:49