我正在尝试实现基本的ajax。我一直在关注本教程。当我单击按钮时,我的 JS 会触发,但我从 ajax url 中得到一个
400
: POST http://localhost:8080/wp-admin/admin-ajax.php 400 (Bad Request)
据我所知,我并没有偏离教程代码太远。她是我的JS:
jQuery(document).ready(function($){
$('#baa_form').submit(function(){
var data = {
action: 'baa_response'
}
$.post(ajaxurl, data, function(response){
alert('Hello');
});
return false;
});
});
PHP:
<?php
function baa_add_menu() {
global $baa_settings_page;
$baa_settings_page = add_menu_page( 'Basic Admin Ajax', 'Basic Admin Ajax', 'edit_pages', 'basic-admin-ajax', 'baa_render_settings_page', false, 62.1 );
}
function baa_load_scripts( $hook ) {
global $baa_settings_page;
if ( $hook !== $baa_settings_page ) {
return;
}
$path = plugin_dir_url( __FILE__ ) . 'js/basic-admin-ajax.js';
wp_enqueue_script( 'basic-admin-ajax', $path, array( 'jquery' ) );
}
add_action( 'admin_menu', 'baa_add_menu' );
add_action( 'admin_enqueue_scripts', 'baa_load_scripts' );
function baa_render_settings_page() {
?>
<form id="baa_form" method="POST">
<div>
<input type="submit" name="baa_submit_button" id="baa_submit_button" class="button-primary" value="go ajax">
</div>
</form>
<?php
}
function baa_response() {
die( 'I got died' );
}
我已经查看了内部
admin-ajax.php
,我可以看到返回400
的唯一原因是我是否未能设置操作。 data['action']
肯定已经确定了,除非我疯了。
我是否做了任何明显错误的事情?是什么导致了
400
反应?
更新 澄清一下,JS 会触发,但对
admin-ajax.php
的请求会收到 400
。你可以在here看到教程make在哪里实现了类似的JS。 (我还没有添加随机数,但视频制作者已经证明它可以在不实现随机数的情况下工作。)
编辑 我已经更新了 PHP 以显示插件的整个 PHP 文件。
更新2 我已将 JS 剥离回其本质,并遵循 Wordpress 中的顶部示例。反应依然是
400
。这让我相信这可能是我在 php.ini 中忽略的东西。目前,我不明白为什么或可能是什么。
jQuery(document).ready(function($) {
var data = {
'action': 'baa_response'
};
$.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
您错过了
action
,它将根据您的 Ajax 请求触发。 WordPress 无法猜测哪个函数与您的 Ajax 调用相关,这就是为什么只是阻止它(400 Bad Request
)。
在 php 文件中添加以下行:
add_action('wp_ajax_baa_response', 'baa_response');
您可能还想查看 Wordpress 中的 Ajax 文档。
请尝试这样,
将此添加到您的 functions.php,
$path = plugin_dir_url( __FILE__ ) . 'js/basic-admin-ajax.js';
wp_enqueue_script( 'basic-admin-ajax', $path, array('jquery'), '1.0', true );
wp_localize_script( 'basic-admin-ajax', 'action_linklist', array(
'ajax_url' => admin_url( 'admin-ajax.php' )
));
function baa_response() {
echo "something.....";
die();
}
在您的 JS 文件中,
jQuery(document).ready(function($){
$('#baa_form').submit(function(){
jQuery.ajax({
url: action_linklist.ajax_url,
type: 'post',
data:{'action': 'baa_response'},
success: function (response) {
alert(response);
}
});
return false;
});
});
希望这对您有帮助,
欲了解更多信息,请访问。
如果有帮助的话,我已经学习了设置的一个非常重要的部分..在我编写和测试时,我总是登录..通常使用隐身模式进行测试,但我很着急..所以,如果你的ajax操作是命令,你需要2行。
add_action( 'wp_ajax_nopriv_command', 'DoCommand' );
add_action( 'wp_ajax_command', 'DoCommand' );
nopriv 对于非用户,在用户登录时删除。试图弄清楚这一点让我发疯。没有详细记录任何示例..