Wordpress自定义查询函数AJAX回调返回0

时间:2014-07-15 17:38:39

标签: jquery ajax wordpress wp-query

此函数位于functions.php中,但仅从AJAX回调中返回0。我无法弄清楚我需要做些什么来使其正常工作。

function CaseStudiesAjaxFunction() {
    global $post;

    $verticle = $_GET["verticle"];
    $product = $_GET["product"];
    $source = $_GET["source"];
    $args = array(
            'posts_per_page' => '12',
            'tag' => array( $verticle, $product, $source)
            );
    $query = new WP_Query($args);
    $matching_posts = array();
    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
    the_post_thumbnail();
    the_title();
    endwhile;
    endif;
    wp_reset_query();
    die();
}

这是Jquery AJAX

function filterCaseStudies() {
    var data = ($('#case-studies-form').serialize());
    alert(data);
    var request = $.ajax({
        type: 'GET',
        url: case_studies_ajax_script.ajaxurl,
        dataType: 'text',
        data: data + "&action=CaseStudiesAjaxFunction"
        });
request.done(function( data ){
$('.case-studies-container').html( data );
    console.log("Request success: " + data);
});
request.fail(function( jqXHR, textStatus ) {
    alert( "Request failed: " + textStatus );
});

数据似乎正在从表单中正确传递,因为我可以回显变量并且AJAX回调看到它们。

3 个答案:

答案 0 :(得分:1)

您看到来自'0'的{​​{1}}响应可能是因为您尚未为此功能注册AJAX操作挂钩。

要正确注册AJAX调用函数,您需要使用操作挂钩wp_ajax_*来管理管理员可用的功能,并wp_ajax_nopriv_*使其在前端可用。

在JavaScript中,未正确设置AJAX调用 - 在jQuery 1.8中不推荐使用admin-ajax.phpdone()。您应该使用"完成","成功"和"错误"而是回调。

使用success()是在WordPress中处理AJAX请求的推荐方法。由于这是一项唯一请求,因此没有理由致电POST

根据个人偏好,我会返回JSON而不是仅使用wp_reset_query()函数转储值。在表单值上检查the_*并确保您没有任何未定义的索引错误并不是一个坏主意。也因为我有点强迫症,它应该是"垂直"而不是" verticle" :)

<强> PHP

isset()

<强> JAVASCRIPT

function CaseStudiesAjaxFunction() {
    global $post;

    $vertical = isset( $_GET["vertical"] )? $_GET["vertical"] : '';
    $product = isset( $_GET["product"] )? $_GET["product"] : '';
    $source = isset( $_GET["source"] )? $_GET["source"] : '';
    $args = array(
            'posts_per_page' => '12',
            'tag' => array( $verticle, $product, $source)
            );
    $query = new WP_Query($args);
    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
        the_post_thumbnail();
        the_title();
    endwhile; endif;
    die();
}
// Add the ajax hooks for admin
add_action( 'wp_ajax_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction' );
// Add the ajax hooks for front end
add_action( 'wp_ajax_nopriv_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction' );

答案 1 :(得分:0)

它返回0,因为admin-ajax.php文件以die('0')结尾。

答案 2 :(得分:0)

当我以前完成WP Ajax调用时,我确保将echo json_encode()所有数据转换为格式良好的JSON响应,然后调用die()。您可以将它们包含在您返回的变量(the_title())中,而不是使用打印或回显的函数($title = get_the_title())。

您可以在数组中返回所有帖子信息和html,将其编码为JSON,然后解码:

function ajax_call(){
    // Run a loop
    $return['code'] = 100;
    $return['content'] = get_the_content(); //etc, etc
    // End loop
    echo json_encode($return);
    die();
}