3

メタ ボックスで 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」は、これをfirebugで見ると応答にあります。これは私を夢中にさせており、ブラウザに送信されているJSONでWTFが進行していることを理解できません。0 をトリミングして jsonlint で実行すると、合格します。

4

3 に答える 3

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ます。

于 2013-08-17T19:11:11.990 に答える
0

以下を追加する必要があります。

die();

結果をエコーし​​た後。

于 2013-08-17T18:47:47.340 に答える
0

コードのどこかに 0 が出力されています。あなたが与えた関数にはありませんが、その関数は明らかにどこかで呼び出されています。echo $resultに変更することでこれを確認できますがdie($result)、根本的な問題は解決されません。つまり、あるべきではない print ステートメントがどこかにあるということです。

于 2013-08-17T18:49:35.243 に答える