【问题标题】:Submit form with AJAX and PHP without page reload使用 AJAX 和 PHP 提交表单,无需重新加载页面
【发布时间】:2022-01-10 18:24:38
【问题描述】:

我的 wordpress 项目中有“添加到收藏夹”功能,我正在使用 <form> 提交该功能。每次我点击添加到收藏按钮时它都可以工作,但页面总是重新加载,这很烦人,所以我决定使用 AJAX,但我无法将它与我的 PHP 文件连接。

这是 PHP 文件,我在其中编写了该功能的函数

if (! function_exists('favorite_button_icon')) {

    function favorite_button_icon() {
        echo apply_filters( 'favorite_button_icon', get_the_favorite_button_icon() );
    }
}

if (! function_exists('get_the_favorite_button_icon')) {

    function get_the_favorite_button_icon() {

        $output = '';
        $action = $currentPath; // window.location.href
        $name   = is_favorite() ? 'remove_favorite' : 'add_favorite';
        $class  = 'favorite-button-pro' . ( is_favorite() ? ' favorite' : '' );
        $icon = is_favorite() ? 'Added' : 'Add';

        $output .= '<form method="post" id="favorite_user_post" 
                     class="favorite_user_post" action="'. $action .'">';
        $output .= '<button id="submit-favorite" type="submit" name="'. $name .'" 
                     value="'. get_the_ID() .'" class="'. $class .'">';
        $output .= $icon;
        $output .= '</button></form>';
        
        return apply_filters( 'get_the_favorite_button_icon', $output );
    }
} 

我只是在 html 中调用该函数

<div class="add-to-favorites-option" > 
      <?php favorite_button_icon() ?>
</div>

上述一切正常,但正如我所说,页面正在重新加载。

这是我使用 AJAX 的尝试

jQuery('#favorite_user_post').submit(function (e) {
    e.preventDefault();
    var form = jQuery(this);
    var url = form.attr('action');
    jQuery.ajax({
        type: 'POST',
        url: url,
        data: form.serialize(),
        success: function (data) {
            console.log(data);
        },
        error: function () {
            console.log('Fail');
        },
    });
});

我在提交时完全没有火,我错过了什么吗?

【问题讨论】:

  • 你可以试试委托 - jQuery('body').on('submit', '#favorite_user_post', function (e) {
  • 如何从Ajax调用php函数stackoverflow.com/a/39342373/12232340
  • 感谢@Kinglish 的评论,但我得到了相同的结果。
  • 所以弄清楚为什么提交事件处理程序没有绑定到表单。

标签: javascript php jquery ajax wordpress


【解决方案1】:

你需要使用wp_ajax_钩子:https://developer.wordpress.org/reference/hooks/wp_ajax_action/

下面的简单示例:

你的 PHP 代码来处理 ajax 请求:

add_action( 'wp_ajax_my_action', 'my_action' );

function my_action() {
    // code that captures your ajax POST request

    wp_die(); // this is required to terminate immediately and return a proper response
}

您的 Ajax 调用:

jQuery('#favorite_user_post').submit(function (e) {
    e.preventDefault();
    var form = jQuery(this);
    // note the added "my_action" to tell the server what function to fire (my be a better way to append this to your form data)
    var url = form.attr('action') + "&=my_action";
    jQuery.ajax({
        type: 'POST',
        url: url,
        data: form.serialize(),
        success: function (data) {
            console.log(data);
        },
        error: function () {
            console.log('Fail');
        },
    });
});

【讨论】:

  • 谢谢@mikerojas,但它对我不起作用,不知道出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多