繁体   English   中英

WordPress AJAX调用未执行PHP

[英]WordPress AJAX call not executing PHP

我正在尝试在WordPress上执行自定义AJAX操作,但无法正常工作。 我有以下表格:

<form method='post' name='form-bid-<?php echo get_the_ID() ?>' class="bid-form">
    <input type='submit' name='<?php echo get_the_ID()?>' value='Licitar' class='bidvalue'>
    <?php wp_nonce_field('ajax-bid-nonce', $post->ID); ?>
</form>

之所以采用这种形式,是因为它是在一个循环中生成的,该循环针对站点上的每个帖子一个,因此我将帖子ID用作输入的唯一名称。

然后,我将表单提交捕获到一个自定义JavaScript文件中:

jQuery(document).ready(function($) {

// Perform AJAX bid on form submit
$('form.bid-form').on('submit', function(e) {

    var action = 'ajaxbid';
    var auction_id = e.target.name.substring('form-bid-'.length);
    var security_container = "#".concat(auction_id);
    var security = $(security_container).val();

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: ajax_bid_object.ajaxurl,

        data: { 
            'action': action,
            'id': auction_id,
            'security': security
        },

        success: function(data) {
            console.log(data);
        }
    });

    e.preventDefault();
});

});

此部分有效,成功后将在控制台上显示0。

最后,我有一个PHP文件,用于注册脚本并具有要在提交表单时调用的功能:

function ajax_bid_init() {
    wp_register_script('ajax-bid-script', get_template_directory_uri() .'/js/ajax-bid-script.js', array('jquery') ); 
    wp_enqueue_script('ajax-bid-script');

    wp_localize_script( 'ajax-bid-script', 'ajax_bid_object', array( 
        'ajaxurl' => admin_url( 'admin-ajax.php' )
    ));

    // Enable the user with no privileges to run ajax_bid() in AJAX
    add_action( 'wp_ajax_nopriv_ajaxbid', 'ajax_bid' );
}

add_action('init', 'ajax_bid_init');

function ajax_bid() {
    // First check the nonce, if it fails the function will break
    check_ajax_referer( 'ajax-bid-nonce', 'security');
    echo json_encode(array('message'=>__('SUCCESS')));  
    die();
}

现在,我只需要返回该数组并将其显示在控制台上的函数。 但是,代码似乎从未在这里运行过,并且AJAX响应始终为0。

我已经在网站上进行了非常类似的登录和注册方法,它们都可以工作。 我已经比较了3个无尽的时间,但似乎找不到我在这里所缺少的东西。

找到了问题! 我忘了提一下,我试图用登录的用户来执行此操作,所以问题出在这一行:

add_action( 'wp_ajax_nopriv_ajaxbid', 'ajax_bid' );

应该是这样的:

add_action( 'wp_ajax_ajaxbid', 'ajax_bid' );

我从登录和注册表格中复制了第一个表格,这很有意义,仅适用于未登录的用户。 但是,出价是完全相反的。

仅供以后参考,如果希望对已登录和未登录用户均可执行此功能,可以同时注册( wp_ajaxwp_ajax_nopriv )同一功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM