2014-09-02 6 views
0

TL : DR : 중복 없음 - 먼저 코드를 아래로 스크롤하여 문제를 찾습니다.WordPress AJAX 요청은 0을 반환합니다.

여기에 the link to the demo that I currently have입니다. functions.php에서

내가 처음 내 스크립트를 로컬 라이즈 : 내 아약스는 I에 호출하는 스크립트에 대한

function ajaxurl(){ 
    wp_enqueue_script('product-selector', get_template_directory_uri() . '/js/ajax.js', array('jquery')); 
    wp_localize_script('product-selector', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request 
     'ajaxurl'   => admin_url('admin-ajax.php'), 
     // generate a nonce with a unique ID "myajax-post-comment-nonce" 
     // so that you can check it later when an AJAX request is sent 
     //'postCommentNonce' => wp_create_nonce('myajax-post-comment-nonce'), 
     ) 
    ); 
} 
add_action('wp_head', 'ajaxurl'); 

그리고이 있습니다은 ajax.js에 대한 마지막

function ajax_callback() { 
    global $wpdb; // this is how you get access to the database 
    // Declare our variable. 
    $cat = $_POST['cat']; 
    // Q the DB 
    $query = $wpdb->get_col($wpdb->prepare(
     " 
      SELECT meta_value 
      FROM $wpdb->postmeta 
      WHERE post_category=%s 
     ", $cat 
     )); 
    header('Content-Type: application/json'); 
    wp_send_json(json_encode($query)); 
} 

add_action('wp_ajax_nopriv_ajax-callback', 'ajax_callback'); 

과 내가 가진 :

$(document).ready(function(){ 
    var back_end_script_url = MyAjax.ajaxurl; 
    $(function() { 
    var category_callback = function(data) { 
     console.log(data); 
     var adhesion_select = $('#adhesion'); 
     var substrate_select = $('#substrate'); 
     substrate_select.find('option').remove(); 
     adhesion_select.find('option').remove(); 
     for (var k in data) { 
      var option = $('<option />').val(k).html(data[k]); 
      adhesion_select.append(option); 
     } 
    }; 
    var adhesion_callback = function(data) { 
     console.log(data); 
     var substrate_select = $('#substrate'); 
     substrate_select.find('option').remove(); 
     for (var k in data) { 
      var option = $('<option />').val(k).html(data[k]); 

      substrate_select.append(option); 
     } 
    }; 
    var category_change = function() { 
     console.log('Category Changed'); 
     var category = $(this).find(":selected").val(); 
     var params = { 
      action: 'ajax-callback', 
      cat: category 
     }; 
     console.log(params); 
     $.post(back_end_script_url, params, category_callback); 
    }; 
    var adhesion_change = function() { 
     console.log('Adhesion Changed'); 
     var adhesion = $(this).find(":selected").val(); 
     var category = $('#cat').find(":selected").val(); 
     var params = { 
      action: 'ajax-callback', 
      cat: category, 
      adhesion: adhesion 
     }; 
     console.log(params); 
      $.post(back_end_script_url, params, adhesion_callback); 
     }; 
     $('#cat').on('change', category_change); 
     $('#adhesion').on('change', adhesion_change); 
    }); 
}); 

내 문제는 데모를 보면 아약스가 숫자 0 만 반환한다는 것입니다. DB의 데이터.

스택 및 워드 프레스 교환에서이 문제와 관련된 모든 질문을 읽었으며 모두 시도했지만 결과는 항상 같습니다.

나는 JS 코드를 고용했지만 그 사람은 나의 말에 맹세했다. 그게 사실인지 아닌지는 잘 모르겠다. 코드에서 문제를 찾을 수 없기 때문이다.

도움을 주셔서 감사합니다. 스택!

+0

요구가 잘 작동하지만, PHP는 내 문제는'행동했다 : ajax-callback' –

답변

1

ajax 호출에서 보내는 매개 변수에 "action"속성이 누락 된 것 같습니다.

귀하의 PARAMS 객체가 있어야한다 :이 도움이

var params = { 
    action: "ajax-call", 
    cat: category 
}; 

희망,

감사합니다,

마르셀로

+0

여전히 싱글 0을 반환합니다. 나는 그것이 간과 할 수있는 간단한 것 같아요. –

+0

죄송합니다, 위의 대답에 잘못된 "조치"를 썼습니다. "ajax-callback"이어야합니다. 너도 그걸 시도 했니? 또한, 당신은 코드를 디버그하고 당신의 기능 "아약스 - 콜백"에지고 있는지 확신합니까? – Mindastic

+0

내 기능이 다가오고 있습니다. 그 부분은 올바르게 작동합니다. 이제는 함수가 결과를 반환하지 않습니다. 단지'[]'로되어 코드가 그대로 남습니다.'

관련 문제