2013-04-30 45 views
1

我創建了下面的功能,基本上解析給定的URL的HTML的http請求,掃描爲一定的階級和處理它找到的文本:最小化jQuery的AJAX解析

我的函數的小樣本:

function displayRating(theID){ 
    var $theUrl = $('#' + theID + ' > a').attr('href'); 
    jQuery.support.cors = true; 
    var num, str, nums=[], avgnum, avgstr, avgnums=[]; 
    $.ajax({ 
    url: $theUrl, 
    type: "GET", 
    timeout: 3000, 
    dataType: "text", 
    success: function(data) { 
     $(data).find(".count").each(function() { 
     str = $(this).text(); 
     num = parseInt(str.substring(1,str.length-1), 10); 
     nums.push(num); 
     }); 
     var totalSum = 0; 
     for (var i = 0; i < nums.length; i++){ 
     totalSum += nums[i]; 
     } 
    more code here... 
    }); 
} 

我把這個函數調用了15次,因爲我需要顯示幾個可以從幾個頁面收集的數據。通過這種方法,我希望http請求的數量與函數被調用的數量(15)相同。但是,我得到的數字非常龐大(340),這意味着在解析HTML時,它還會在後臺請求包含在我調用的URL中的所有圖像。這意味着頁面的加載時間不可接受(5-6秒)。

我的問題是:我可以優化這個功能嗎,讓它以純文本形式讀取HTML文件而不需要在後臺加載所有圖片?有什麼辦法來減少這些要求?

注意:不幸的是,PHP不是一種選擇。

+0

你如何調用displayRating()函數? – 2013-04-30 09:58:12

+0

你可以使用[jquery defferred](http://learn.jquery.com/code-organization/deferreds/jquery-deferreds/)嗎?這樣,只有在所有ajax回調完成後,您才能完成您的工作。你甚至可以使用[this](http://stackoverflow.com/questions/5627284/pass-in-an-array-of-deferreds-to-when)線程中看到的ajax callbak數組。 – Alepac 2013-04-30 10:05:19

+0

@roasted該函數在文檔末尾簡單地稱爲「displayRating(someid)」。 – otinanai 2013-04-30 10:11:03

回答

0

你可以用一個自定義更換SRC attribut,解析新的字符串,比更換正確的SRC標籤:

data=data.replace(/ src=/g," mySrc="); 
$(data).find(".count")... 
... 
data = data.replace(/ mySrc=/g," src="); 

Here是使用的jsfiddle(但不加載)您的個人資料圖片。

N.B.你應該使用一個自定義的attribut(例子中的mySrc)在數據字符串中找不到任何軟件。

+0

感謝您的時間!聽起來很有希望。我會嘗試,並回來讓你知道任何改進。 – otinanai 2013-04-30 12:15:04