js和php之间的JSON语法无效

时间:2017-11-03 09:17:50

标签: javascript jquery json ajax

我有这段代码:

   var temp = 'tag1,tag2'.split(','),
       tags = [];

     if (temp.length > 0) {
         for (i = 0; i < temp.length; ++i) {
             tags.push(temp[i]);
         }
     }

现在我想将此数组作为Ajax请求发送:

        var data = {
            action: 'my_wp_ajax',
            ajax_req: JSON.stringify(tags)
        };

        $.post(
            ajaxurl,
            data,
            function (data) {

                console.log('this is data: '+data);

            }
        );

另一方面,我有这些代码:

echo $_POST['ajax_req'];

$temp = json_decode($_POST['ajax_req']);
$error = json_last_error();

echo $error;

我在浏览器控制台中看到的结果是:

this is data: "[\\\"tag1\\\",\\\"tag2\\\"]4"

正如您在上面的结果中看到的,最后一个json错误是4,这意味着无效的json语法。我不知道上面的代码有什么问题。如果我试试

foreach (json_decode($_POST['ajax_req']) as $hi)
    echo $hi;

在控制台中它只显示我

this is data: ""

我做错了什么?

修改

我在控制台中尝试了var_dump(get_magic_quotes_gpc(), $_POST);和结果:

"bool(false)\narray(2) {\n  [\"action\"]=>\n  string(8) \"my_wp_ajax\"\n  [\"ajax_req\"]=>\n  string(19) \"[\\\"tag1\\\",\\\"tag2\\\"]\"\n}\n0"

1 个答案:

答案 0 :(得分:0)

无需双重字符串化数组,传递给数组的data将由jQuery正确处理:

var tags = 'tag1,tag2'.split(',');
var data = {
    action: 'my_wp_ajax',
    ajax_req: tags
};