AJAX wp-MySQL运行太慢

时间:2011-08-13 作者:Niraj Chauhan

我做了一个ajax函数,它返回所有以特定字母开头的帖子,假设用户单击字母a,那么所有以字母a开头的帖子都会显示出来,无论我如何成功地运行此函数,但前提是我使用普通mysql,但我想使用wp mysql,

我的代码将代表我;)

echo $_GET[\'letter\'];
$getLetter = $_GET[\'letter\'];
global $wpdb;
global $post;

$result = $wpdb->get_results(\'SELECT * FROM wp_posts where post_title LIKE "\'.$getLetter.\'%" AND post_status = "publish" AND post_type="post"\');
while($row = $result)
{
  echo \'<a href="\' . $row["guid"] . \'">\' . $row[\'post_title\'] . \'</a><br>\';
}
我使用的代码是通过URL获取信件并在数据库中进行搜索,但如果我使用上述代码,则搜索帖子需要的时间太长(需要一分钟以上),但如果我使用以下代码

echo $_GET[\'letter\'];
$getLetter = $_GET[\'letter\'];
$con = mysql_connect(\'localhost\', \'root\', \'\');
mysql_select_db("wordpress", $con);
$result = mysql_query(\'SELECT * FROM wp_posts where post_title LIKE "\'.$getLetter.\'%" AND post_status = "publish" AND post_type="post"\');
while($row = mysql_fetch_array($result))
{
  echo \'<a href="\' . $row["guid"] . \'">\' . $row[\'post_title\'] . \'</a><br>\';
}
然后一切都很快,

谁能给我解释一下吗?我对wp-db不太了解,但我希望它能在wpdb中工作

我做错什么了吗?

EDITEDAJAX代码:

<script type="text/javascript">

jQuery(function($) {
    $(document).ready(function() {
    $("#Loading").hide();
        $(".letter").bind(\'click\', function(){
        $("#Loading").fadeIn(); //show when submitting
        var val = $(".letter").val;
        $.ajax({
             url:\'<?php bloginfo(\'template_directory\'); ?>/newContent.php?letter=\'+$(this).html(), 

             success:function(data){
                $("#Loading").fadeOut(\'fast\'); //hide when data\'s ready
                $("#content1").html(data);
             }
        });
        });
    });
});
</script>

1 个回复
最合适的回答,由SO网友:Bainternet 整理而成

当您直接调用数据库而不是使用$wpdb 对象的速度更快,原因很简单,即您只调用数据库,并且$wpdb 在您可以使用$wpdb 对象

您应该尝试使用WordPress Ajax api(不是真正的api,而是将Ajax与WordPress结合使用的正确方法)。基本上,您需要将代码包装在一个函数中,并确保您最终死亡:

function my_ajax_callback(){
    $getLetter = $_GET[\'letter\'];
    global $wpdb;
    global $post;

    $result = $wpdb->get_results(\'SELECT * FROM wp_posts where post_title LIKE "\'.$getLetter.\'%" AND post_status = "publish" AND post_type="post"\');
    while($row = $result)
    {
      echo \'<a href="\' . $row["guid"] . \'">\' . $row[\'post_title\'] . \'</a><br>\';
    }
    die();
}
然后需要添加一个动作挂钩:

//if you want only logged in users to access this function use this hook
add_action(\'wp_ajax_ACTION_NAME\', \'my_AJAX_processing_function\');

//if you want none logged in users to access this function use this hook
add_action(\'wp_ajax_nopriv_ACTION_NAME\', \'my_AJAX_processing_function\');
*如果您希望登录的用户和来宾通过ajax访问您的功能,请添加这两个挂钩*ACTION\\u NAME必须与ajax帖子中的ACTION值匹配。

然后将ajax调用直接指向admin ajax。php并添加ACTION\\u名称:

<script type="text/javascript">
jQuery(function($) {
    $(document).ready(function() {
    $("#Loading").hide();
        $(".letter").bind(\'click\', function(){
            $("#Loading").fadeIn(); //show when submitting
            var val = $(".letter").val;
            var data = {action: \'ACTION_NAME\', letter: val};
            $.ajax({
                 url:\'url to wp-admin/admin-ajax.php\',
                 success:function(data){
                    $("#Loading").fadeOut(\'fast\'); //hide when data\'s ready
                    $("#content1").html(data);
                 }
            });
        });
    });
});
</script>
这样,它就不会只为那个ajax调用加载所有WordPress。

结束