我尝试开发一个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
答案 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;和参考帖子,页面,密钥等