为什么这不起作用 - JS

时间:2014-07-21 17:44:19

标签: javascript jquery ajax

我正在开展一个项目来检查是否在网站上更新了新项目。我希望程序检查每一秒以查看是否有新项目进入。项目由ID指定(我可以获得)。但是,我在使用AJAX更新网站部分时遇到问题。我希望它能够刷新'网站每秒钟,并将最近的项目与其先前的最新项目进行比较(即,如果当前>过去)。任何帮助将不胜感激。

<!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(我可以通过控制台运行它吗?)

2 个答案:

答案 0 :(得分:0)

问题可能出在这一行:

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

它甚至不是有效的语法。它应该写成这样:

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

此外,您应该知道加载函数是异步的,因此如果您需要对加载的元素执行某些操作,则需要将这些操作放在回调中。 (作为load方法的第二个参数传递的函数。)

答案 1 :(得分: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. 将变量封装在&#34; private&#34;范围(防止全局名称空间污染)(谢谢George Mauer)
  5. 您的变量名称无效(即jquery-2不符合您的预期,2(..)语法无效)
  6. 你的setTimeout(update(), 1000);没有做任何事情,因为它基本上做setTimeout(undefined, 1000);
  7. 您甚至在加载之前处理了更新的HTML(Ajax是异步!)
  8. 这个答案的内容涵盖:

    1. 实际错误是什么(问题没有真正说明)
    2. 提供具体的工作解决方案,因为缺少部分HTML