AJAX响应始终为0

时间:2016-06-03 12:38:59

标签: jquery ajax wordpress

我尝试开发一个wordpress插件。 现在我想进行AJAX调用。

我有两个文件。

第一个文件是我模板的文件:

add_action( 'admin_footer', 'dmd_action_javascript' );
?>

<?php function dmd_action_javascript() { ?>
<script type="text/javascript">
jQuery(document).ready(function() {
  //click event f�r submit button
  jQuery('.dmd_admin_button').click(function () {

  //Daten von den HTML Feldern in JS-Vars �bersetzen
  var post = jQuery('input[name=dmd_fast_post]');
  var page = jQuery('input[name=dmd_fast_page]');
  var searchbox = jQuery('input[name=dmd_fast_searchbox]');
  var formidable = jQuery('input[name=dmd_fast_formidable]');
  var key = jQuery('input[name=dmd_fast_key]');

  if ( jQuery( post ).prop( "checked" ) )
      post.val(1); 
  else
      post.val(0);

 if ( jQuery( page ).prop( "checked" ) )
     page.val(1);
 else
     page.val(0);

  if ( jQuery( searchbox ).prop( "checked" ) )
     searchbox.val(1);
 else
     searchbox.val(0);

  if ( jQuery( formidable ).prop( "checked" ) )
     formidable.val(1);
 else
     formidable.val(0);     

  var data = 'post=' + post.val() + '&page=' + page.val() + '&searchbox=' + searchbox.val() + '&formidable=' + formidable.val() + '&key=' + key.val();
jQuery.ajax({
      type:"POST",
      url: ajaxurl, // our PHP handler file
      data: { action: "my_backend_action", data:data },
      success:function(data){
            alert(data);
      },
      error: function(errorThrown){
          alert(errorThrown);
      } 

  });
return false;      

    });
});
</script>
<?php } ?>

我的插件中的第二个文件应该响应一些AJAX调用的值。:

    public function set_actions(){
        add_action( 'admin_enqueue_scripts', array($this, 'dmd_custom_style_load'), 99 ); 
        add_action( 'wp_enqueue_scripts', array($this, 'dmd_enqueue_child_theme_styles'), 99);
        add_action( 'admin_menu', array($this, 'dmd_register_adminmenu'));
        add_action( 'wp_before_admin_bar_render', array($this, 'dmdPages'));
        add_action('wp_ajax_my_backend_action_callback', array($this, 'my_backend_action_callback'));
        add_action( 'wp_ajax_nopriv_my_backend_action_callback', array($this, 'my_backend_action_callback'));
    } 

public function my_backend_action_callback() {
    global $wpdb; // this is how you get access to the database

    $whatever = intval($_POST['data']);

    echo $whatever;
    exit(); // this is required to terminate immediately and return a proper response
}  

很抱歉,但我在stackoverflow中阅读了所有问题和答案,没有任何帮助我。

我找不到自己的错。有人可以告诉我这是什么问题吗?

编辑:

在萤火虫中我的帖子看起来像这样:

  

动作my_backend_action数据   交= 1&安培;页= 1&安培;搜索框= 0&安培;强大= 0&安培;键= 27dda19e85378bb8df73fa3f2806a30c

2 个答案:

答案 0 :(得分:1)

jQuery.ajax({
                type: 'POST',
                url: '<?php echo admin_url( 'admin-ajax.php'); ?>',
                data: {"action": "validateID","post": post.val(), "page": page.val() , "searchbox": searchbox.val(), "formidable": formidable.val(), "key": key.val()},
                success: function(data){
                     alert(data);
    }
});

如上所述调用ajax然后编写以下内容并立即查看是否打印

function validateID(){
    echo $response = $_REQUEST['post'];
    die();
}
add_action( 'wp_ajax_validateID', 'validateID' );
add_action( 'wp_ajax_nopriv_validateID', 'validateID' );

答案 1 :(得分:1)

data是一个看起来像查询字符串的字符串。你正在尝试将该字符串转换为int。那是你的问题。

当你这样做时

var data = 'post=' + post.val() + '&page=' + page.val() + '&searchbox=' + searchbox.val() + '&formidable=' + formidable.val() + '&key=' + key.val();` 

您正在构建一个字符串,当您执行

data: { action: "my_backend_action", data:data },

您要将该单个字符串分配给密钥数据。 &#34;参数&#34;您正试图设置机智帖子,页面等,无法在服务器上访问。

现在,您正在服务器上阅读&#34;数据&#34;并将其转换为整数。

$whatever = intval($_POST['data']);

我不确定您希望将"post=1&page=1&searchbox=0"之类的字符串转换为int。

最好的办法是不要自己构建一个查询字符串,而只是构建一个对象。

var data = { 
    post : post.val(),
    page : page.val(),
    searchbox : searchbox.val()
    formidable : formidable.val(),
    key : key.val(),
    action: "my_backend_action";
}
jQuery.ajax({
      type:"POST",
      url: ajaxurl, // our PHP handler file
      data: data,
      ...

现在在服务器上,摆脱那个&#34;数据&#34;和参考帖子,页面,密钥等