比较php数组与javascript数组相同的数据

时间:2016-07-28 19:25:59

标签: javascript php jquery arrays json

场景:我需要在每个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!");
    }
});

当我将olddatadata进行比较时,它们看起来几乎完全相同,但...中/的数据在\/中看起来像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]

2 个答案:

答案 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);

现在你只是比较两个字符串。