WordPress中的ajax / json调用最终会出现格式错误的JSON

时间:2013-08-17 18:38:12

标签: php ajax wordpress json

我在元框中进行ajax调用并返回一些非常简单的数据。但是,它不断抛出错误:

parsererror
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

这是ajax电话:

uid = new Date().getTime();
appReq = jQuery.ajax({
    type : 'post',
    dataType : 'json',
    url : 'admin-ajax.php',
    data : { action : 'get_app_sidebars', post_id : currentApp, uid : uid }
});
appReq.done(function(data){
    if(data.widgetNum > 0 && data.widgetName != '' && data.widgetBase != '') {
        alert(data);
    }
    else {
        // do something here
    }
});
appReq.fail(function(jqXHR, textStatus, errorThrown){
    alert(textStatus + '\n' + errorThrown);
});

这是php:

function get_app_sidebars(){
    // get the meta for a custom post type
    $meta = $this->get_app_meta($_REQUEST['post_id']);
    $result['widgetNum'] = $meta['num_widgets'];
    $result['widgetName'] = $meta['widget_name'];
    $result['widgetBase'] = $meta['widget_base'];
    $result = json_encode($result);
    echo $result;
}

当我收到数据时会出现问题:

{"widgetNum":"6","widgetName":"Custom Sidebars","widgetBase":"my-custom-sidebars"}0

好的,当我在萤火虫中看到这个时,最后的“0”就在响应中。这让我很疯狂,我无法弄清楚WTF是否正在发送给浏览器。如果我修剪0并通过jsonlint运行它,它就会通过。我用Google搜索了这个,但是找不到答案。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

我建议使用wp_send_json_success,因为它会处理所有事情(json编码,echodie()):

function get_app_sidebars()
{
    $meta = $this->get_app_meta($_REQUEST['post_id']);
    if( $meta )
    {
        $result['widgetNum'] = $meta['num_widgets'];
        $result['widgetName'] = $meta['widget_name'];
        $result['widgetBase'] = $meta['widget_base'];
        wp_send_json_success( $result );
    } 
    else
    }
        wp_send_json_error( array(
            'error' => 'Custom error message'
        ));
    }
}

另外,使用check_ajax_referer进行必要的安全检查。

答案 1 :(得分:0)

这里你去:你需要添加     死(); 在回应结果之后。啧!

答案 2 :(得分:0)

代码中的某处,正在打印0。它不在你给的功能中,但是这个功能显然是在某个地方调用的。您可以通过将echo $result更改为die($result)来确认这一点,但这并不能解决根本问题,即某个地方您有一个不应该存在的打印语句。