当前位置: 首页 > 面试题库 >

链接Ajax URL的正确方法

卢聪
2023-03-14
问题内容

在我的插件中,我有一些jQuery-
Ajax代码,用于处理表单数据,并在单击按钮后立即将其添加到数据库中。由于许多人的插件文件夹路径不同,所以我想知道是否有某种方式可以标准化指向数据处理PHP文件的URL。请参阅下面的示例:

$.ajax({
   type: "POST",
   url: "url_to_php_file_path.php",
   data: data,
   cache: false,
   success: function() {
      alert.("added");
   }
});

问题答案:

在WordPress中,所有AJAX请求都必须发送到以下URL:

http://www.example.com/wp-admin/admin-ajax.php

您不应该直接向插件或主题目录中的文件发出AJAX请求。

另外,请勿对上面的URL进行硬编码,而应使用以下函数来构造URL:

<script>
    ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>

除了上述以外,您还可以使用wp_localize_script(),但这不是必需的,以上也可以。

注意:不用担心“管理员”部分,此URL是适用于所有用户(包括非登录(来宾)用户)的正确URL。

告诉WordPress您的AJAX请求使用什么功能

您需要让WordPress知道哪个函数应该处理您的AJAX请求。

为此,您将创建一个自定义函数,并使用wp_ajax_*wp_ajax_nopriv_*钩子进行注册:

add_action('wp_ajax_mycustomfunc', 'mycustomfunc'); // Logged-in users
add_action('wp_ajax_nopriv_mycustomfunc', 'mycustomfunc'); // Guest users
function mycustomfunc() {

    $whatever = esc_html($_POST['whatever']);
    echo 'It works: '.$whatever;
    exit; // This is required to end AJAX requests properly.
}

不要忘记在AJAX请求中也指定“ mycustomfunc”

最后,这是您如何发出适当的AJAX请求的方法:

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

        var my_data = {
            action: 'mycustomfunc', // This is required so WordPress knows which func to use
            whatever: "yes it is" // Post any variables you want here
        };

        jQuery.post(ajax_url, my_data, function(response) {
            alert('Got this from the server: ' + response);
        });
    });
})(jQuery);

结合所有

如果必须将所有内容放到一个文件中,请按以下步骤操作:

// Register my custom function for AJAX processing
add_action('wp_ajax_mycustomfunc', 'mycustomfunc'); // Logged-in users
add_action('wp_ajax_nopriv_mycustomfunc', 'mycustomfunc'); // Guest users
function mycustomfunc() {

    $whatever = esc_html($_POST['whatever']);
    echo 'It works: '.$whatever;
    exit; // This is required to end AJAX requests properly.
}


// Inline JavaScript
add_action('wp_footer', 'my_inline_js');
function my_inline_js() { ?>

    <script>
        // Set the "ajax_url" variable available globally
        ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";

        // Make your AJAX request on document ready:
        (function ($) {
            $(document).ready(function () {

                var my_data = {
                    action: 'mycustomfunc', // This is required so WordPress knows which func to use
                    whatever: "yes it is" // Post any variables you want here
                };

                $.post(ajax_url, my_data, function(response) { // This will make an AJAX request upon page load
                    alert('Got this from the server: ' + response);
                });
            });
        })(jQuery);
    </script>

    <?php
}

注意:对于ajax_url零件,您可以使用wp_localize_script()而不是手动进行设置,但是灵活性较差,因为它需要指定可能没有的现有排队脚本。

注意:此外,为了将内联JavaScript手动输出到页面中,此wp_footer钩子是正确使用的钩子。如果使用wp_localize_script(),则应改用wp_enqueue_scripts钩子。



 类似资料:
  • 在 OpenResty 中,连接池在使用上如果不加以注意,容易产生数据写错地方,或者得到的应答数据异常以及类似的问题,当然使用短连接可以规避这样的问题,但是在一些企业用户环境下,短连接 + 高并发对企业内部的防火墙是一个巨大的考验,因此,长连接自有其用武之地,使用它的时候要记住,长连接一定要保持其连接池中所有连接的正确性。 -- 错误的代码 local function send() fo

  • 关于SpringWebFlux的小问题,以及如何“链接”http调用。 通过一个具体的例子,这里是一个非常简单的SpringMVC示例,带有一个rest模板。 在这个片段中,我们看到了非常简单的内容。仅初始化一个rest模板。 超文本传输协议请求有效载荷对象的构造。 使用所构建的对象来查询第一外部web应用API以获得响应。 重要的是,需要第一个HTTP调用的响应来进行第二个HTTP调用。它们只能

  • 我们在我们的项目中使用连接池。我们在我们的项目中看到,在连接关闭后,语句也会关闭。我知道在连接池的情况下,连接关闭后,到数据库的物理连接不会关闭,而是返回到池进行重用。所以我的问题是: 如果在连接关闭后关闭语句会发生什么?语句是否会正确关闭/关闭连接是否会关闭所有语句,关闭语句是多余的/语句是打开的,尽管连接返回到池中,但由于打开语句,它是不可重用的?(我们同时使用Statement和Prepar

  • 问题内容: 我想知道是否有人可以告诉我从视图中链接到另一个页面的正确方法。 是否有此功能或仅仅是关于 干杯, 问题答案: 我认为您在应用程序中是“内部”的意思。 您可以创建自己的标签,并在href中插入这样的网址 或者您可以通过这种方式使用URL帮助器来生成标签 所以…使用它… 那会产生 对于其他评论的问题 我会用我的第一个例子 所以… 对于图像(和其他资产),我不会将文件路径放在php中,我只会

  • 问题内容: 当每个呼叫都取决于之前的呼叫是否已完成时,我试图找到创建异步呼叫的最佳方法。目前,我通过递归调用定义的流程函数来链接方法,如下所示。 这就是我目前正在做的。 然后我将其称为如下 虽然这对我来说非常好,但我不禁认为必须有一种更好(更简单)的方法。以后我的递归调用变得太深时,会发生什么? 注意 :我不是在浏览器中使用javascript,而是在Titanium框架中使用本机,这类似于Nod

  • 我尝试用Spring Security创建登录页面。我需要实现某种类型的登录。登录的URL必须相同。例如 我打开主登录页面-< code > localhost:8080/log in 然后我输入一些信息并按下“下一步”按钮 我移动到 在这个页面上,我有两种类型的登录-通过ip、通过短信、通过等等。如果我按下按钮“通过ip”,我需要看到url- 但调用控制器方法 如果我按按钮"通过短信"我需要看到