场景:我需要在每个x分钟的间隔循环中将页面加载(php)上的数据库单元与自身进行比较。
我的初始加载数据如下所示:
var olddata = JSON.stringify(<?php echo json_encode($data1); ?>) + "~|~" +
JSON.stringify(<?php echo json_encode($data2); ?>) + "~|~" +
JSON.stringify(<?php echo json_encode($data3); ?>);
因此,在页面加载时,我将单元格保存为带有“〜|〜”分隔符的javascript变量,其中$ data1,$ data2和$ data3是数据库中的3个不同单元格(数据数组)。
我的间隔循环数据(ajax调用)如下所示:
// PHP on the AJAX page
echo json_encode($data1)."~|~".json_encode($data2). "~|~".json_encode($data3);
// AJAX code that gets called every x Intervals
$.get("ajaxpage.php", function(data) {
if (data == olddata) {
console.log("Good!");
}
});
当我将olddata
与data
进行比较时,它们看起来几乎完全相同,但...中/
的数据在\/
中看起来像data variable and not in the
} olddata`变量。
示例:
"10":["10"],"11":["11 5\/25"] // data = return from the AJAX call
"10":["10"],"11":["11 5/25"] // olddata = what was originally echoed on page load.
我如何比较两者以便它们完美匹配?因此,我从数据库和json_encode回显的内容将与我在页面上回显的完全相同的东西排成一行,并从json函数返回jason编码。
注意:如果我删除了JSON.stringify,那么它将返回[object Object]
答案 0 :(得分:2)
你正在使用一种非常糟糕的做法。只需使用AJAX即可:
var olddata = JSON.stringify(<?php echo json_encode($data1); ?>) + "~|~" +
JSON.stringify(<?php echo json_encode($data2); ?>) + "~|~" +
JSON.stringify(<?php echo json_encode($data3); ?>);
将“olddata”存储在JavaScript Global var中,然后将旧数据与$.get
返回的新数据进行比较。这不是您的错误的解决方案,但它是一种更好的方式来做您正在做的事情。
修复错误只需在$.get
函数中声明返回值的类型,如下所示:
$.get("ajaxpage.php", function(data) {
if (data == olddata) {
console.log("Good!");
}
}, 'text');
有关返回类型的更多信息,请查看jQuery文档:jQuery $.get Documentation
答案 1 :(得分:0)
只需将其更改为:
var olddata = '<?php echo json_encode($data1, JSON_HEX_APOS); ?>~|~<?php echo json_encode($data2, JSON_HEX_APOS); ?>~|~<?php echo json_encode($data3, JSON_HEX_APOS); ?>';
后端:
echo json_encode($data1, JSON_HEX_APOS)."~|~".json_encode($data2, JSON_HEX_APOS). "~|~".json_encode($data3, JSON_HEX_APOS);
现在你只是比较两个字符串。