【问题标题】:Uncaught SyntaxError Unexpected Number JSON.parse未捕获的 SyntaxError 意外数字 JSON.parse
【发布时间】:2014-04-22 23:58:17
【问题描述】:

试图通过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,一切都很好。我不知道如何解决它:(

【问题讨论】:

    标签: php jquery ajax json wordpress


    【解决方案1】:

    找到了解决办法。

    我需要在 AJAX 处理程序函数的末尾添加 die() 以防止更多内容。 Wordpress 在回复末尾添加了0。像这样的:

    {"test":"test"}0
    

    所以 AJAX 处理函数末尾的 die() 解决了问题

    【讨论】:

    • 原来admin-ajax.php里面总是有0,访问url或者删除函数进程。这个答案让我感到有些沮丧,以为出了点问题。谢谢你。更多信息在这里:wordpress.stackexchange.com/questions/97502/…
    • 5 年后,你仍然为我节省了很多时间
    【解决方案2】:

    通过指定dataType: 'json',,传递给成功函数的数据已经被反序列化为一个对象,所以你不要在它上面调用JSON.parse

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

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

    【讨论】:

    • 感谢回复,不知道。我删除了 JSON.parse 你写的,但仍然得到那个错误: parsererror SyntaxError {stack: (...), message: "Unexpected number"}
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2014-04-24
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多