2014-07-15 71 views
1

該函數在functions.php中,但僅從AJAX回調中返回0。我無法弄清楚我需要做些什麼才能使它正常工作。Wordpress自定義查詢函數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回調看到他們。

回答

1

您看到從admin-ajax.php有可能是'0'響應,因爲你還沒有註冊的AJAX行動掛鉤爲此功能。

要正確註冊您的AJAX呼叫功能,您需要使用操作掛鉤wp_ajax_*來實現admin和wp_ajax_nopriv_*可用的功能,以使其在前端可用。

在您的JavaScript中,AJAX調用未正確設置 - done()success()在jQuery 1.8中已棄用。您應該使用「完成」,「成功」和「錯誤」回調。

使用POST是在WordPress中處理AJAX請求的推薦方式。由於這是一項獨特的要求,因此沒有理由致電wp_reset_query()

從個人偏好我會返回JSON,而不是隻使用the_*功能傾銷值。在表單值中檢查isset()並不是一個壞主意,以確保您沒有任何未定義的索引錯誤。也正因爲我有點強迫症,它應該是 「垂直」,而不是 「verticle」 :)

PHP

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'); 

JAVASCRIPT

function filterCaseStudies(){ 
    var data = $('#case-studies-form').serialize(); 
    $.ajax({ 
     type: 'GET', 
     url: case_studies_ajax_script.ajaxurl, 
     dataType: 'text', 
     data: data + "&action=CaseStudiesAjaxFunction", 
     complete: function(xhr, status){ 
      console.log("Request complete: " + status); 
     }, 
     error: function(xhr, status, errorThrown){ 
      console.log("Request failed: " + status); 
     }, 
     success: function(data, status, xhr){ 
      console.log("Request success: " + data); 
      // change the html 
      $('.case-studies-container').html(data); 
     } 
    }); 
} 
+0

感謝您的代碼。我以前有過鉤子。我逐字地嘗試了你的代碼,並且響應是空的。 – user3841979

+0

..這不是強迫症,我只是不能拼寫。 – user3841979

+0

查詢實際上可能沒有任何返回。我需要看看這個並回來。 – user3841979

0

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

+0

感謝您的信息。任何建議如何讓這個工作? – user3841979

0

當我在過去完成WP Ajax調用時,我確保將echo json_encode()的所有數據轉換成格式良好的JSON響應,然後再調用die()。您可以將它們包含在您返回的變量中($title = get_the_title()),而不是使用打印或回顯功能(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(); 
} 
+0

該示例不使用JSON ... – doublesharp

+0

JSON只是封裝數據的一種方式,使得傳輸格式正確的數據變得更容易(在許多情況下)。這正是我使用AJAX調用的方式。 –

+0

我知道JSON是什麼,如果這是我的代碼,我會用它,但是如果您查看示例,'the_ *'函數正在用於將值轉儲到響應,然後AJAX使用'html ()'來更新DOM元素的內容。 – doublesharp