【问题标题】:WordPress Button triggered ajax requestWordPress 按钮触发 ajax 请求
【发布时间】:2017-08-23 09:33:28
【问题描述】:

所以我实际上已经阅读了有关此问题的 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。

【问题讨论】:

  • 按钮在表单内吗?如果是这样,它会在您单击它时提交 from,因为 type=submit 是默认值。使用 type=button,或在处理函数中显式阻止事件默认操作。
  • 试图在表单内外使用它,它确实触发了jQuery但是jQuery由于某种原因没有触发addToDB,

标签: javascript php jquery ajax wordpress


【解决方案1】:

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

顺便说一句:我在这里使用了 onClick 函数,但即使替换为 jQuery 点击事件它也可以工作。

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

【讨论】:

    【解决方案2】:

    修改php代码如下。

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

    【讨论】:

    • 即使我使用 echo 也没有任何反应,页面上不会出现任何文字。按下后查看了页面的来源并试图找到它,但我没有。也不知道它是否有帮助,但我读到响应 0 表示如果未找到操作,但我定义了它。
    • 以前试过,现在又试了一次,即使我调用动作和功能相同也没有改变。
    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多