2012-07-12 12 views
-4

已创建以下脚本来测试db字段的值是否已更改,如果是,则重新加载页面,如果不是,则提醒用户未发生更改。为什么不是.post和.html调用可以在jQuery中的if(条件)中进行比较?

该警报仅用于查看.post函数返回的内容。

auto_refresh工作正常,因为我需要它检查每5秒,当if()条件设置为'=='页面警报显示,如果它设置为'!='页面不断重新加载。

jQuery.post获取db字段数据,但它似乎无法正确比较2个值。

任何帮助将不胜感激,谢谢

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

而不是试图解析原始数据,为什么不从$。员额通过HTML(),如:

<p>4</p> 

然后jQuery插入用新的版本替换p标签从$ .post() ,因为传递的HTML没有空白空间和公司rison可以被正确地制作。

+1

您是否比较了控制台上的值?写'console.log($('#slide')。html(),data)'。 – 2012-07-12 14:01:30

+1

使用一个调试器([没有任何理由](http://blog.niftysnippets.org/2011/03/no-excuse.html)),并设置比较断点,然后检查'数据'和返回'.html()'的值(理想情况下,首先将它放在一个变量中,以使生活变得简单)。没有实际的调试工作的替代品。据推测'.html()'返回的东西*有点不同于'data'(前后的空白,诸如此类)。 – 2012-07-12 14:01:58

+0

正在添加空白区域,但直到它被指出时才错过,谢谢。我已经尝试过变量,但相同的结果回来了,我需要一种去掉我认为的空白空间的方式。 – starks 2012-07-12 15:02:04

回答

0

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

+0

“某些浏览器可能会添加空格或不需要的字符”。你有这方面的一些资源/支持吗? – 2012-07-12 14:13:12

+0

没有,但一直在那里。当然,它也取决于保存文本的元素。 – Diego 2012-07-12 14:20:54

+0

firefox和chrome都在html的周围添加了包括输入在内的很多元素的空白空间,感谢我的头部,甚至没有寻找空白区域。我肯定会有解决方案。 – starks 2012-07-12 14:58:55

0

如果$( '#幻灯片')。HTML()==数据

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

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

一样,如果滑块具有p标签或输入值范围内的东西,把它比作数据,看它是否具有相同的值在p标签或输入返回值,然后用一个空字符串只是更换所有的空格注意安全。

顺便说一句,尽量不要使用警报,因为你无法真正知道是否有额外的空白。尝试使用诸如“调试器”之类的东西,如果在视觉工作室中使用IE,或者在使用Chrome或Firefox时使用console.log。

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字符串并与之进行比较。
相关问题