簡體   English   中英

WordPress AJAX請求返回0

[英]WordPress AJAX request returns 0

TL; DR: 不重復 -先進行編碼,然后滾動到底部以解決問題。

這是我當前擁有的演示的鏈接

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!

似乎您在ajax調用中發送的參數中缺少“ action”屬性。

您的params對象應該是:

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

希望這可以幫助,

問候,

馬塞洛

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM