2014-07-15 4 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

당신이 AJAX 액션 후크를 등록하지 않았기 때문에 당신은 admin-ajax.php 가능성에서 '0' 반응을보고있다 이 기능을 위해.

AJAX 전화 기능을 제대로 등록하려면 관리자가 사용할 수있는 기능에 대해 wp_ajax_* 후크를 사용해야하며 프런트 엔드에서 사용하려면 wp_ajax_nopriv_*을 사용해야합니다.

자바 스크립트에서 AJAX 호출이 올바르게 설정되지 않았습니다. done()success()은 jQuery 1.8에서 사용되지 않습니다. 대신 "complete", "success"및 "error"콜백을 사용해야합니다.

WordPress에서 AJAX 요청을 처리 할 때 권장되는 방법은 POST입니다. 고유 한 요청이므로 wp_reset_query()으로 전화 할 이유가 없습니다.

나는 개인 설정에서 the_* 함수를 사용하여 값을 그냥 덤핑하는 대신 JSON을 반환합니다. 양식 값에 isset()을 확인하여 정의되지 않은 색인 오류가 없는지 확인하는 것은 좋지 않습니다. 정보 주셔서 내가 조금 OCD 해요 있기 때문에, 그것은해야한다 "수직"가 아니라 "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'); 

자바 스크립트

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

.. OCD가 아니기 때문에 철자를 할 수 없습니다. – user3841979

+0

쿼리가 실제로 아무 것도 반환하지 않을 수도 있습니다. 나는 이것을 조사하고 돌아 가야합니다. – user3841979

0

admin-ajax.php 파일의 끝이 die('0')이므로 0을 반환합니다.

+0

감사합니다. 이 기능을 작동시키는 방법에 대한 제안이 있으십니까? – user3841979

0

이전에 WP Ajax 호출을 완료 한 후 echo json_encode() 모든 데이터를 멋지게 형식화 된 JSON 응답으로 확인한 후 die()을 호출하십시오. 인쇄하거나 에코하는 함수 (the_title()) 대신 반환하는 변수에 포함 할 수 있습니다 ($title = get_the_title()).

당신은 JSON으로, 어레이의 모든 게시물 정보와 HTML을 반환 인코딩 할 수

후 디코딩 :

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

관련 문제