2017-04-22 102 views
2

我的Ajax调用输出总是显示0作为输出不知道为什么如何调用AJAX在WordPress

functions.php我有这样的代码

function get_data() { 
    $abc = '1'; 
    $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'"); 
    echo $result; //returning this value but still shows 0 
    wp_die(); 

} 

add_action('wp_ajax_nopriv_get_data', 'get_data'); 
add_action('wp_ajax_get_data', 'get_data'); 

我的Ajax调用是在JavaScript

$('body').on("click", ".re-reset-btn", function(e){ 

     var panel = $('#re-compare-bar');  

     $.ajax({ 
       type : "GET", 
       dataType : "json", 
       url : "/wp-admin/admin-ajax.php", 
       data : {action: "get_data"}, 
       success: function(response) { 

         alert("Your vote could not be added"); 
         alert(response); 
        } 
      }); 

     $("#re-compare-bar-tabs div").remove(); 
     $('.re-compare-icon-toggle .re-compare-notice').text(0); 

    }); 

我做Ajax调用在WordPress不使用插件,但没有得到什么,我passing.Even如果我输出$ ABC它仍然显示为0。

回答

5

在后端有一个由WordPress的本身定义的全局变量ajaxurl。

这个变量不是由WP在前端创建的。这意味着如果你想在前端使用AJAX调用,那么你必须自己定义这样的变量。

这样做的好方法是使用wp_localize_script。

让我们假设你的AJAX调用都在我的Ajax-的script.js文件,然后添加wp_localize_script这个js文件,像这样:

function my_enqueue() { 
     wp_enqueue_script('ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery')); 
     wp_localize_script('ajax-script', 'my_ajax_object', array('ajax_url' => admin_url('admin-ajax.php'))); 
} 
add_action('wp_enqueue_scripts', 'my_enqueue'); 

本地化您的JS文件后,就可以使用my_ajax_object对象在JS文件:

jQuery.ajax({ 
    type: "post", 
    dataType: "json", 
    url: my_ajax_object.ajax_url, 
    data: formData, 
    success: function(msg){ 
     console.log(msg); 
    } 
}); 
+0

它说my_ajax_object没有定义 – smarttechy

+0

wp_local_script请将此替换为wp_localize_script现在我已经修改了代码 –

1

使用admin_url('admin-ajax.php');

<script type="text/javascript"> 
    $('body').on("click", ".re-reset-btn", function(e){ 

      var panel = $('#re-compare-bar');  

      $.ajax({ 
        type : "POST", 
        dataType : "json", 
        url : "<?php echo admin_url('admin-ajax.php'); ?>", 
        data : {action: "get_data"}, 
        success: function(response) { 

          alert("Your vote could not be added"); 
          alert(response); 
         } 
       }); 

      $("#re-compare-bar-tabs div").remove(); 
      $('.re-compare-icon-toggle .re-compare-notice').text(0); 

     }); 
    </script> 
+0

此代码位于JavaScript文件中.......所以它没有运行<?php echo admin_url('admin-ajax.php'); ?> – smarttechy

+0

您可以在<?php wp_footer();之前将脚本放在footer.php文件中。 ?>。 –

0

如果您在响应得到0 管理-ajax.php,这意味着你的AJAX调用工作正常。 但是,您还没有在函数get_data中将$ wpdb定义为全局变量。 检查你的错误日志,你必须在那里看到错误。 尝试:

function get_data() { 
global $wpdb; 
     $abc = '1'; 
     $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'"); 
     echo $result; //returning this value but still shows 0 
     wp_die(); 

}