【问题标题】:AJAX: Send and retrieve a value with jquery post() and PHP, WordPressAJAX:使用 jquery post() 和 PHP、WordPress 发送和检索值
【发布时间】:2010-08-18 20:17:23
【问题描述】:

我正在尝试在 WordPress 页面中进行以下操作:

  1. 用户点击“排序帖子”按钮
  2. 按钮的值被发送到 sortFilter.php 页面
  3. 当前页面已刷新,并使用 sortFilter.php 中发布的值创建新循环。

在初始页面上有一个

我要加载数据的标签:

<p id="sortFilter"></p>

这是我正在使用的代码,但它似乎不起作用(没有任何内容被加载到 #sortFilter p 中)

$(document).ready(function() {

    setInterval(function(){     
        $("#sortFilter").load("http://<?php echo $_SERVER[HTTP_HOST]; ?>/sort-filter/");
    },1000);

    //Filter Categories
    $.ajaxSetup({cache:true});
    $('#byAuthorCtrl ul li').click( function() {
        $.post("http://<?php echo $_SERVER[HTTP_HOST]; ?>/sort-filter/", {id: "testValue"}
        );
    });
});

然后在 sortFilter.php 上:

<?php

/*
Template Name: sortFilter
*/

$id = $_POST['id'];
echo $id;
?>

现在我只是使用测试值来尝试发布到页面。

【问题讨论】:

    标签: php jquery ajax wordpress post


    【解决方案1】:

    WordPress 内置了 AJAX 功能。使用带有参数“action”的 POST 将您的 ajax 请求发送到 /wp-admin/admin-ajax.php:

    jQuery(document).ready(function(){
            jQuery.ajax({
              type:'POST',
              data:{
                action:'my_unique_action',
                id:'testValue'
              },
              url: "http://mysite/wp-admin/admin-ajax.php",
              success: function(value) {
                jQuery(this).html(value);
              }
            });
    });
    

    如果你只希望它为登录用户工作,那么像这样将它挂在插件中:

    add_action('wp_ajax_my_unique_action','doMyCustomAjax');
    

    或者像这样挂钩它只对未登录的用户起作用:

    add_action('wp_ajax_nopriv_my_unique_action','doMyCustomAjax');
    

    如果您希望它适用于所有人,请使用两者。

    这里是doAjax函数,例如:

    function doMyCustomAjax(){
      $id = ( isset( $_POST['id'] ) ) ? $_POST['id'] : '';
      if( empty( $id ) )
        return;
      echo $id;
    }
    

    把它也放在functions.php 中。这将返回您在 AJAX 中发送的 id。

    admin-ajax.php 已经使用了一些动作名称,因此请确保您查看文件并且不要使用相同的动作名称,否则您会不小心尝试执行删除 cmets 等操作。

    编辑

    add_action 行放在functions.php 文件中。 admin-ajax.php 文件将运行一些函数,然后运行你的 'action' 值生成的钩子,然后终止脚本。我已经修改了上面的代码以反映这些信息。

    【讨论】:

    • 我应该把 add_action 行放在哪里——在我的主题的 functions.php 文件或 admin-ajax.php 中?在我这样做之后,如何从 admin-ajax.php 中检索发布的值?谢谢你的帮助,约翰!
    • 感谢更新,约翰...我在函数 doMyCustomAjax() {
    • 射击,忘记了其中一个右括号。现在修好了。
    【解决方案2】:

    好的...很抱歉使用Answer 来添加评论,但是这里的代码显示会更容易详细说明。

    所以,我的 functions.php 中有以下内容:

    add_action('wp_ajax_my_unique_action','doMyCustomAjax');
    
    function doMyCustomAjax(){
      $id = ( isset( $_POST['id'] ) ) ? $_POST['id'] : '';
      if( empty( $id ) )
        return;
      echo $id;
    }
    

    footer.php 中的以下脚本将在我的类别存档中执行:

    <script type="text/javascript">
        $(document).ready(function() {
            //Filter Categories
            $.ajaxSetup({cache:true});
            $('#byAuthorCtrl ul li').click( function() {
                jQuery.ajax({
                  type:'POST',
                  data:{id:'my_unique_action'},
                  url: "http://www.theknotcollective.com/wp-admin/admin-ajax.php",
                  success: function(value) {
                    jQuery(this).html(value);
                  }
                });
            });
        });
    
    </script>
    

    以及我的 category.php 顶部的以下内容:

    <p id="sortFilter"><?php doMyCustomAjax(); ?></p>
    

    我的目标是在单击链接后发布该“id”变量,然后在重新加载页面后检索它,以便在页面刷新时产生不同的循环。

    我是 ajax 和这种 PHP 函数的新手,所以我不太明白这里发生了什么,显然我错过了一些东西/做错了什么。如果您能详细说明一下,我将不胜感激!

    谢谢!

    【讨论】:

    • 您需要在 'data' 中添加 'action' 项:data:{id:'my_unique_action',action:'my_unique_action'} 到 ajax 调用中。 WordPress 通过将'wp_ajax_' 添加到作为“操作”发送的值来构建钩子。另外,不要直接拨打doMyCustomAjax()。 AJAX 将请求发送到 admin-ajax.php 并触发钩子,此时您的函数会将 id 作为成功值回显到 javascript。
    • 我将操作项添加到'data',然后将jquery脚本的这一行更改为 success: function(value) { alert(value); 但警报当我点击 li 时是空的...有什么想法吗?
    猜你喜欢
    • 2012-07-23
    • 2018-07-28
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多