创建以下脚本是为了测试db字段的值是否已更改,如果已更改,则重新加载页面,如果未更改,则提醒用户尚未发生更改。
警报只是为了查看.post函数返回了什么。
auto_refresh运行良好,因为我需要它每5秒检查一次,当if()条件设置为"=="时,将显示页面警报,如果设置为"!=="页面不断地重新加载。
jQuery.post正在获取数据库字段数据,但似乎无法正确比较这两个值。
任何帮助都将不胜感激,谢谢
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);
编辑
与其试图解析原始数据,不如从$.post()中传递HTML,比如:
<p>4</p>
然后jQuery插入并用$.post()中的新版本替换p标记因为html是传递的,所以没有空白,可以正确地进行比较。
我认为将新值与html进行比较不是很安全。某些浏览器可能会添加空格或不需要的字符。我会尝试将旧值保存在隐藏类型的输入中,并在变量中使用.val()
,或者更好地使用事件。这取决于你的情景。
If$('#slide').html()==数据
那么这意味着条件失败了,它不相等,所以它显示了警报。
问题是,数据变量可能会返回一些额外的空白。若我是你们,我会尝试在滑块中解析一小段数据变量和一小段html,并比较这些值。
就像如果滑块在p标记或输入值中有东西一样,将其与数据进行比较,看看它是否在该p标记或输出值中返回了相同的值,然后用空字符串替换所有空格,以确保安全。
顺便说一句,尽量不要使用提醒,因为你不能真正确定是否有多余的空白。如果在visualstudios中使用IE,请尝试使用类似"调试器"的东西,或者使用chrome或firefox时使用console.log。
无法保证这两个字符串将永远相同!想想看:同一个渲染的html可能有很多字符串差异。例如,<a href="/file"> click </a>
和<a href="http://example.org/file">click</a>
都是相同的HTML,但字符串不同。
你可以在这里采取两种不同的方法:
- 您可以创建某种规范化例程,以确保您认为"相同"的两个html片段具有相同的字符串形式。通过该例程运行两个html碎片,然后进行比较
- 您可以更明确地管理版本。
- 包括某种版本指示器:
- 您可以使用
ETAG
标头(这意味着您可以利用http缓存机制) - 您可以在html本身中包含某种版本号(可能在
data-version
属性中),并对它们进行比较
- 您可以使用
- 您可以将服务器中的html字符串单独保存,并与之进行比较
- 包括某种版本指示器: