首页 文章

WordPress按钮触发了ajax请求

提问于
浏览
1

所以我实际上已经阅读过有关这方面的stackoverflow问题,但是对于使用最新版本的wordpress来说它们有点老了 .

我的最终目标是从我的表单向数据库提交一些数据,但是现在ajax响应对我不起作用 . 在WP中自定义页面加载时,所有代码都被加载,因此所有函数都应该起作所有这些都在PHP文件中,现在为什么echo用于创建JS脚本 . 这是我的代码的重要部分

echo '<button id="ZapisPrace">Save</button>
<script>
jQuery("#ZapisPrace").click(function($){
    var data={
        action: "addToDB",
        info: "nomz"
    };
    jQuery.post(ajaxurl,data,function(response){
    alert("Response was "+ response);
    });
});
</script>';
add_action('wp_ajax_addToDB','pridajDoDB');
function pridajDoDB(){
    echo '<script>console.log("AAA")</script>';
    wp_die();
}

使用当前版本的WP,因此变量ajaxurl指向

/wordpress/wp-admin/admin-ajax.php

没有console.log正在发生,响应始终为0,即使我删除了pridajDoDB函数或add_action . 它只是没有正确触发ajax请求 . 有人能让我知道为什么吗?此外,我还没有使用像wp_localize_script,wp_register_script或wp_enqueue_script这样的函数,因为所有这些都在一个加载的PHP文件中,并且我不需要导入jquery,因为我知道WP中的默认值 . 我刚刚学习如何使用WP,PHP AJAX和jQuery,所以我还有很多东西需要学习 .

PS:我应该使用WP方式使用ajax .

2 回答

  • 0

    更改php代码如下 .

    add_action('wp_ajax_addToDB','addToDB');
    function addToDB(){
        echo "AAA";
        wp_die();
    }
    
  • 0

    好的,所以我没有弄清楚上面的代码是如何工作的,但是我设法让它通过我在网上找到的不同的wp结构工作:

    BTW:我在这里使用了onClick函数,但即使用jQuery click事件替换它也能正常工作 .

    add_action('wp_ajax_addToDB','pridajDoDB');
    
    echo '<button onClick='triggerAjax()'>Save</button>?>';
    
    <script>
    function triggerAjax(){
        <?php $nonce = wp_create_nonce( 'subbmitData' );?>//used so ajax response can verify from where is the request coming
        jQuery.ajax({
            type: "post",url: "admin-ajax.php",data: { action: 'addToDB', _ajax_nonce: '<?php echo $nonce; ?>' },
            success: function(html){
                    console.log(html);//this will console log everything that happens in ajax called php function. Echo works as well.
                }
            });
        }
    </script>
    <?php
    
    function pridajDoDB(){
        check_ajax_referer( "subbmitData" );//this check from where is the request coming from
        //here database commands works but if you echo or console log something it will be just passed to success function above
        die();
    }
    ?>
    

相关问题