AJAX:使用jquery post()和PHP,WordPress发送和检索值

时间:2010-08-18 20:17:24

标签: php jquery ajax wordpress post

我正在尝试在WordPress页面中发生以下情况:

  1. 用户点击“按帖子排序”按钮
  2. 按钮的值发送到sortFilter.php页面
  3. 刷新当前页面,并使用sortFilter.php中发布的值创建新循环。
  4. 在初始页面上有一个

    标签,我想将数据加载到:

    <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;
    ?>
    

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

2 个答案:

答案 0 :(得分: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已经使用了一些动作名称,因此请确保查看该文件并且不要使用相同的动作名称,否则您将不小心尝试删除注释等等。

修改

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

答案 1 :(得分:1)

好的...抱歉使用“答案”添加评论,但在此处详细说明代码显示会更容易。

所以,我在我的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函数的新手,所以我不太明白这里发生了什么,显然我错过了什么/做错了什么。如果你能详细说明一下,我真的很感激它!

THX!