2014-09-02 194 views
0

TL; DR:不是Dupe - 先编码,滚动到问题底部。WordPress AJAX请求返回0

这是the link to the demo that I currently have

functions.php我第一次本地化我的脚本:

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调用有:

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

终于为ajax.js我:

$(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); 
    }); 
}); 

所以我的问题是,如果你看演示,ajax只返回数字0,而不是来自db的数据。

我已经阅读了关于堆栈和wordpress交流的这个问题的所有相关问题,并尝试了所有这些问题,结果总是相同的。

我雇佣了JS代码,但这个人发誓我的结局。我不确定这是否属实,因为我在代码中找不到任何问题。

感谢您的帮助,Stack!

+0

需求以及工作,但PHP我的问题是'行动: ajax回调' – 2014-09-03 11:27:00

回答

1

看起来您错过了您在ajax调用中发送的参数中的“action”属性。

你的params对象应该是:

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

希望这有助于

问候,

马塞洛

+0

仍然返回一个0.我觉得这是一个简单的事情,我忽略,但。 – 2014-09-02 15:12:21

+0

对不起,我在上面的答案中写了错误的“动作”。它应该是“ajax-callback”。你也试过那个吗?另外,你是否调试过代码,你确定它正在进入你的函数“ajax-callback”? – Mindastic 2014-09-02 15:37:54

+0

它正在接近我的功能。该部分正常工作。现在函数不返回任何结果 - 只是'[]',让我的代码看起来像这样:'' – 2014-09-02 16:14:14