未捕获的SyntaxError意外的数字JSON.parse

时间:2014-04-22 23:58:17

标签: php jquery ajax json wordpress

尝试通过ajax请求获取json数据,但始终会收到此错误:

Uncaught SyntaxError Unexpected Number

这是我的js代码:

var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';

    $.ajax({
        url: ajaxurl,
        type: 'POST',
        dataType: 'json',
        data: { action : 'getPills' },
        success: function(data){
            product = JSON.parse(data);
            console.log(product);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });

这是我的php代码:

add_action('wp_ajax_getPills', 'getPills');
add_action('wp_ajax_nopriv_getPills', 'getPills');

function getPills(){

        $data = array(
            "test" => 'test'
        );

        error_log(json_encode($data), 0);

        echo json_encode($data);
}

调用error_log来查看我尝试接收的json数据:

{"test":"test"}

之前我在其他项目中使用了ajxa + json,这一切都很好。我不知道如何解决它:(

2 个答案:

答案 0 :(得分:5)

找到了解决方案。

我需要在AJAX处理函数的末尾添加die()以防止进一步的内容。 Wordpress在回复结束时添加了0。像这样:

{"test":"test"}0

所以在AJAX处理函数结束时die()修复了问题

答案 1 :(得分:3)

通过指定dataType: 'json',,传递给success函数的数据已经被反序列化为一个对象,因此不要在其上调用JSON.parse

    success: function(data){
        console.log(data);
    },

虽然这应该会给您一个错误,例如SyntaxError: Unexpected token o而不是Uncaught SyntaxError Unexpected Number。您应该检查开发人员工具以确切了解服务器返回的内容。