duancai1904 2017-03-29 18:23
浏览 149
已采纳

WordPress按钮触发了ajax请求

So I have actually read stackoverflow questions about this, but they are somewhat quite old to work with newest version of wordpress.

My end goal is to submit to database some data from my forms but for now ajax response is not working for me. On custom page load in WP all code is loaded so all functions should work. All of this is inside of PHP file for now that why echo is used to create JS scripts. Here's the important part of my code

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();
}

Using current version of WP so variable ajaxurl is pointing to the

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

No console.log is happening, response is always 0, even when I remove pridajDoDB function or add_action. It's just not triggering the ajax request correctly. Can somebody let me know why? Also I have not used yet functions like wp_localize_script, wp_register_script or wp_enqueue_script because all of this is in one PHP file that's loaded, and I don't need to import jquery as far as I know its default available in WP. I am just learning how to use WP, PHP AJAX and jQuery, so I have still quite a lot to learn.

PS: I am supposed to use the WP way of using ajax.

  • 写回答

2条回答 默认 最新

  • doudou3213 2017-03-31 08:49
    关注

    Ok so I didn't figure out how code above works, however I managed to get it working trough different wp structure I found online:

    BTW: I used onClick function here but it works even when replaced with jQuery click event.

    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();
    }
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • dongmo3413 2017-03-29 18:26
    关注

    Change php code as follows.

    add_action('wp_ajax_addToDB','addToDB');
    function addToDB(){
        echo "AAA";
        wp_die();
    }
    
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C++代码报错问题,c++20协程
  • ¥15 c++图Djikstra算法求最短路径
  • ¥15 Linux操作系统中的,管道通信问题
  • ¥15 ansible tower 卡住
  • ¥15 等间距平面螺旋天线方程式
  • ¥15 通过链接访问,显示514或不是私密连接
  • ¥100 系统自动弹窗,键盘一接上就会
  • ¥50 股票交易系统设计(sql语言)
  • ¥15 调制识别中这几个数据集的文献分别是什么?
  • ¥15 使用c语言对日志文件处理