2014-07-21 3 views
-6

Я работаю над проектом, чтобы проверить, обновлены ли новые элементы на веб-сайте. Я хочу, чтобы программа проверяла каждую секунду, чтобы увидеть, появился ли новый элемент. Элементы обозначаются идентификатором (который я могу получить). Однако у меня возникли проблемы с использованием 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 ('body')' – 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. Правильно используйте функции обхода и манипулирования DOM jQuery. Разделение
  3. Лучше HTML/JS
  4. Инкапсулируйте переменный в «частные» сферах (предотвратить глобальное загрязнение пространства имен) (спасибо George Mauer)
  5. Вы имели некорректные имена переменных (т.е. jquery-2 не то, что вы ожидаете, и 2(..) является недопустимый синтаксис)
  6. вашего был setTimeout(update(), 1000);, который делает ничего, так как это не по существу делает setTimeout(undefined, 1000);
  7. Вы обработанный обновленный HTML, возможно, прежде чем он был даже загружен (Аякс асинхронный!)

Что этот ответ делает не покрытие:

  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 

Также вы должны знать, функция загрузки является асинхронной, так что если вам нужно что-то делать с загруженными элементами, необходимо поместить эти действия в обратном вызове. (Функция передана как второй аргумент метода загрузки.)

Смежные вопросы