2014-07-21 234 views
-6

我正在研究一個項目,以檢查網站上是否更新了新項目。我想讓程序檢查每一秒鐘,看看是否有新物品進來。這些物品由一個ID(我可以得到)指定。但是,我無法使用AJAX更新網站的一部分。我希望它每秒'刷新'網站,並將最新的項目與其以前的最新項目進行比較(即如果當前>過去)。任何幫助將非常感激。爲什麼不能正常工作 - JS

<!DOCTYPE html> 
<html> 
<head> 
<script src="jquery-2.1.1.js"></script> 
</head> 
<body> 
<button onclick = "body()">Click Me</button> 

<script> 
var highest = 0; 
var compare = 0; 
var creator; 
var newItem = false; 
var HelpPeople = 'People's Names'; 

var elements = document.getElementsByClassName('ms-itmhover'); 

highest = elements[0].getElementsByClassName('ms-vb2')[1].innerText; 

var body = function() 
{ 
     window.setTimeout(update(), 1000); 
} 

var update = function() 
{ 
    window.jquery-2('body').load('URL'); 

    elements = document.getElementsByClassName('ms-itmhover'); 

    compare = elements[0].getElementsByClassName('ms-vb2')[1].innerText; 

    creator = elements[0].getElementsByClassName('ms-vb-user')[0].innerText; 

    if(compare > highest && creaCompare(creator)) 
    { 
     displayNew(); 
    } 

    body(); 
} 

var creaCompare = function(create) 
{ 
    var comparer = false; 

    for(var i = 0; i < HelpPeople.length; i++) 
    { 
     if(create == HelpPeople[i]) 
     { 
      comparer = true; 
     } 
    } 
    return comparer; 
} 

var displayNew = function() 
{ 

    confirm('There is a new item'); 
    body(); 

} 
</script> 
</body> 

我想我問過問題不對。我正在尋找在網站(不是我自己的)上運行它,並解析出數據並檢查新項目(AJAX)。我想知道如何使用它,我怎麼能這樣的網站上使用JS

+0

你的jQuery進口看起來錯,除非你擁有了它在一個名爲jQuery的2.1.1.js –

+1

開始通過檢查錯誤瀏覽器控制檯,如從'jQuery的2(「主體」)文件' – charlietfl

+0

哪裏是你的HTML嗎? –

回答

0

我,因爲你使用jQuery ......但是不使用它改寫了你的代碼。

<!DOCTYPE html> 
<html> 
<head> 
<script src="jquery-2.1.1.js"></script> 
</head> 
<body> 
<button id="btnTest">Click Me</button> 

<script type="text/javascript"> 
// wait for document loaded 
$(function() { 

var updateUrl = 'put your update url here'; 

var highest = 0; 
var compare = 0; 
var creator; 
var newItem = false; 
var HelpPeople = 'People's Names'; 

var elements = $('.ms-itmhover');   // where's this element 

highest = $('.ms-vb2', elements).text(); // where are those elements ???? 

var body = function() { 
    $('#btnTest").prop('disabled', true); 
    setTimeout(update, 1000); 
}; 

var update = function() 
{ 
    $('body').load(updateUrl, function (response, status, xhr) { 
     if (status == "error") { 
      alert("Sorry but there was an error : " + xhr.status + " " + xhr.statusText); 
      return; 
     } 

     elements = $('.ms-itmhover'); 
     compare = $('.ms-vb2', elements).text(); 
     creator = $('.ms-vb-user', elements).text(); 

     if (compare > highest && creaCompare(creator)) 
     { 
      displayNew(); 
     } 

     body(); 
    }); 
}; 

var creaCompare = function(create) { 
    var comparer = false; 

    for (var i = 0; i < HelpPeople.length; i++) 
    { 
     if(create == HelpPeople[i]) { 
      comparer = true; 
     } 
    } 
    return comparer; 
}; 

var displayNew = function() { 
    confirm('There is a new item'); 
    body(); 
}; 

// prevent button click more than once 
$('#btnTest").one('click', body); 

}); 
</script> 
</body> 

至於回答實際問題,沒有更多的HTML,沒有太多可以回答的問題。但是,上述更改大概會修復:

  1. 在文檔加載之前執行JS代碼;現在等到頁面加載後
  2. 正確使用jQuery的DOM遍歷和操作函數。
  3. 更好的HTML/JS分離
  4. 封裝的「私人」範圍(防止全局命名空間污染)變量(謝謝你,喬治·莫爾)
  5. 你有無效的變量名(即jquery-2是不是你所期望的,並且2(..)是無效的語法)
  6. 你有setTimeout(update(), 1000);這不,因爲它沒有什麼本質上是做setTimeout(undefined, 1000);
  7. 你處理你的更新HTML或許之前有人甚至裝(Ajax是異步!)

這是什麼答案呢蓋:

  1. 什麼是實際的錯誤(這個問題並沒有真正說明)
  2. 舉個具體的工作方案,因爲HTML的部分缺失
+1

作爲'$(...)'獎勵''也會阻止你的所有變量走向全局 –

+0

但是,這有助於解決一些問題,我想我錯了。我正在尋找在網站(不是我自己的)上運行它,並解析出數據並檢查新項目(AJAX)。我想知道如何使用它以及如何在本網站上使用JS(我可以通過控制檯運行它嗎?) – Cirrith

+0

如果您使用Chrome,當然!只需按F12並轉到「控制檯」選項卡。 –

0

的問題可能是在這條線(我可以通過控制檯運行呢?):

window.jquery-2('body').load('URL'); 

它甚至不是一個有效的句法。應該這樣寫:

$('body').load('URL'); // Instead of 'URL' there also should be a proper URL 

你也應該知道負載的功能是異步的,所以如果你需要做一些與加載的元素,你需要把這些動作中的回調。 (如負載方法的第二個參數傳遞的功能。)