Wordpress:为什么我从 ajaxurl 收到 400?

问题描述 投票:0回答:3

我正在尝试实现基本的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);
    });
});
php ajax wordpress
3个回答
2
投票

您错过了

action
,它将根据您的 Ajax 请求触发。 WordPress 无法猜测哪个函数与您的 Ajax 调用相关,这就是为什么只是阻止它(
400 Bad Request
)。

在 php 文件中添加以下行:

add_action('wp_ajax_baa_response', 'baa_response');

您可能还想查看 Wordpress 中的 Ajax 文档。


1
投票

请尝试这样,

将此添加到您的 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 与 wordpress 结合使用

插件中的 AJAX


0
投票

如果有帮助的话,我已经学习了设置的一个非常重要的部分..在我编写和测试时,我总是登录..通常使用隐身模式进行测试,但我很着急..所以,如果你的ajax操作是命令,你需要2行。

add_action( 'wp_ajax_nopriv_command', 'DoCommand' );
add_action( 'wp_ajax_command', 'DoCommand' );

nopriv 对于非用户,在用户登录时删除。试图弄清楚这一点让我发疯。没有详细记录任何示例..

© www.soinside.com 2019 - 2024. All rights reserved.