我正在尝试在Wordpress / Buddypress中进行简单的ajax测试。
以下代码在IE和Chrome中运行良好。 但是在Firefox中,调用了javascript,但它只是刷新当前页面。 在firebug控制台中没有错误,但响应为空。 我不认为PHP被调用。
我需要更改什么才能在Firefox中使用它?
javascript:
jQuery(document).ready(function(){
jQuery('#test-form input#save').click(function(){
jQuery('.ajax-loader').toggle();
jQuery('#save').attr({'disabled': true});
jQuery.post( ajaxurl, {
action: 'test_save',
'cookie': encodeURIComponent(document.cookie),
'_wpnonce': jQuery("input#_wpnonce-save").val(),
},
function(response) {
jQuery('.ajax-loader').toggle();
// alerts work up to here in all browsers
jQuery('#test-form').append(response);
});
});
});
php:
add_action( 'bp_after_profile_loop_content', 'show_test', 100 );
add_action('wp_ajax_test_save', 'test_save_function');
function show_test() {
?>
<form action="#" id="test-form">
<?php wp_nonce_field( 'save', '_wpnonce-save' ); ?>
<input type="submit" name="save" id="save" value = "test ajax"/>
<span class="ajax-loader"></span>
</form>
<?php
}
function test_save_function() {
check_ajax_referer('save');
echo "php -button was clicked";
}
答案 0 :(得分:4)
请注意,只有当您登录WordPress时它才有效!如果您尚未登录, wp_ajax 会调用钩子 wp_ajax_nopriv_myfunction 。
链接:
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_nopriv_(action) http://www.simonbattersby.com/blog/2012/06/wordpress-wp_ajax-returning-0-error/
希望这可以节省一个小时左右的人......
答案 1 :(得分:1)
这适用于FF,Chrome和IE。另外 - 添加die();在php函数结束时
jQuery(document).ready(function(){
jQuery('#test-form input#save').click(function(){
jQuery('#save').attr({'disabled': true});
jQuery.ajax({
type: 'POST',
url:"/wp-admin/admin-ajax.php",
data: {
action: 'test_save',
'_wpnonce': jQuery("input#_wpnonce-save").val(),
},
success: function(results) {
jQuery('#save').attr('value', 'js was Clicked');
jQuery('#test-form').append(results);
}
});
return false;
});
});