GET_TEMPLATE_PART不支持AJAX

时间:2017-10-25 作者:Trello

我通过ajax加载了一些内容,当我尝试这样做时:

$resp = array(
    \'success\' => true,
    \'data\' => \'the content here\'
);
它工作起来没有任何问题,但如果我使用这样的东西:

$resp = array(
    \'success\' => true,
    \'data\' => get_template_part( \'templates/update\', \'profile\' )
);
它给了我语法错误:JSON。parse:JSON数据的第1行第1列出现意外关键字。

the content here{"success":true,"data":null}
get\\u template\\u part有什么问题?

3 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

get_template_part() 包括PHP文件,该文件将中断$resp. 您需要使用output buffering 要将输出捕获到变量中,请执行以下操作:

ob_start();
get_template_part( \'templates/update\', \'profile\' );
$data = ob_get_clean();

$resp = array(
    \'success\' => true,
    \'data\'    => $data
);

SO网友:I\'m a TI calculator

因为这也让我挠头了一段时间;如果它对任何人都有用的话,下面是我想出的代码。

注册并本地化JS脚本,下面是一些很好的实用信息WP Ajax gen

wp\\U ajax函数本身:

    function fpost()
{
    $post_type = sanitize_text_field($_POST[\'post_type\']);
    $post_id = intval($_POST[\'post_id\']);
    $args = array(
        \'post_type\' => $post_type,
        \'post_status\' => \'publish\',
        \'p\' => $post_id,
    );
    $p_query = new WP_Query($args);
    ob_start();
    if ($p_query->have_posts()) {
        while ($p_query->have_posts()) {
            $p_query->the_post();
            get_template_part(\'template-parts/content\', $post_type);
        }
        wp_reset_postdata();
        wp_send_json_success(ob_get_clean());
    } else {
        wp_send_json_error();
    }
    die();
}
add_action(\'wp_ajax_nopriv_fp\', \'fpost\');
add_action(\'wp_ajax_fp\', \'fpost\');
JS发送post\\u type和post\\u id,WP返回2个对象;模板化内容+“成功”(这很有帮助……)

希望有帮助

SO网友:Carlos Bermudez Diaz

这对我有用!不要忘记在JS ajax函数中将数据类型设置为json

所以它将是:

dataType: \'json\',

结束