-4

The following script has been created to test if the value of a db field has changed and if so then reload the page and if not, alert the user that the change has not happened.

The alert is just to see what is being returned by the .post function.

The auto_refresh works fine as i need it to check every 5 seconds, when the if() condition is set to '==' the page alert shows and if it is set to '!=' the page continually reloads.

jQuery.post is getting the db field data but it doesn't seem to be able to compare the 2 values correctly.

any help would be greatly appreciated, thanks

var auto_refresh = setInterval(function(){
    $.post("/index.php/listen", function(data) {
          if($('#slide').html() != data)
            {
               window.location.reload()
            }
            else
            {
               alert('its the same'+ data);
            }
          });
    }, 5000);

EDITED

Rather than trying to parse raw data, why not pass HTML from the $.post() like:

<p>4</p>

Then the jQuery inserts the the replaces the p tag with the new version from the $.post() because the html is passed on there is no white space and the comparison can be made correctly.

4

3 回答 3

0

您正在比较两个 html 字符串:一个是从 DOM 序列化的,另一个是来自服务器响应的。

不能保证这两个字符串永远相同!想一想:同一个渲染的 html 可以有很多字符串差异。例如<a href="/file"> click </a><a href="http://example.org/file">click</a>都是相同的 HTML,但不同的字符串。

您可以在这里采取两种不同的方法:

  1. 您可以创建某种规范化例程,以保证您认为“相同”的两个 html 片段将具有相同的字符串形式。通过此例程运行两个 html 片段,然后进行比较。
  2. 您可以更明确地管理版本。
    1. 包括某种版本指示器:
      1. 您可以使用ETAG标头(这意味着您可以利用 http 缓存机制)。
      2. 您可以在 html 本身中包含某种版本号(可能在data-version属性中),然后进行比较。
    2. 您可以将 html 字符串与您的服务器分开保存并与之进行比较。
于 2012-07-12T14:13:50.593 回答
0

我认为将新值与 html 进行比较不是很安全。某些浏览器可能会添加空格或不需要的字符。我会尝试将旧值保存在隐藏类型的输入中,并.val()在变量中使用 or,事件更好。这取决于您的情况。

于 2012-07-12T14:06:06.473 回答
0

如果 $('#slide').html() == 数据

那么这意味着条件失败,它不相等,所以它显示了警报。

问题是 data 变量可能会带有一些额外的空格。如果我是你,我会尝试解析一小部分数据变量,以及滑块中的一小部分 html 并比较这些值。

就像滑块在 ap 标签或输入值中有内容一样,将其与数据进行比较以查看它是否在该 p 标签或输入值中返回相同的值,然后将所有空格替换为空字符串以确保安全。

顺便说一句,尽量不要使用警报,因为您无法确定是否有额外的空格。如果在 Visual Studio 中使用 IE,请尝试使用“调试器”之类的东西,或者在使用 chrome 或 firefox 时尝试使用 console.log。

于 2012-07-12T14:11:06.003 回答