0

我在为 wordpress 创建插件时正在学习 php 和 Ajax,并设法完成了它。它计算网站上所有横幅获得的点击次数和展示次数。你通过那个插件等放置横幅......无论如何,我刚刚添加了每个横幅获得的印象数。它没有任何问题。但是因为我是自己做的而不是一些教程,所以我想知道这是正确的方法:

$(window).load(function() {

    $("a[count]").each(function(){
        var id = $(this).attr("count");
        var data = {
            action: 'impressions_count',
            postid: id
        };
        $.post(MyAjax.ajaxurl, 
            data,
            function(response) {
                console.log( response);
        });
    })
});

这是更新数据库的代码的一部分

function impressions_count_callback() {
        global $wpdb;
        $post_id = $_POST['postid'];
        //print_r($post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID = '$post_id'");
    }

如您所见,我正在为现场的每个baner发送ajax请求,所以如果我有5个baner,那就是5个请求。如果我在一个请求中全部发送它会有什么不同吗,因为即使那样我也必须在 db 查询中执行 foreach 循环,所以我会再次执行 5 次 db 查询,除非它可以一次性完成。

PS 即使我在 WP 中工作,我相信这更多的是 php/ajax 问题,这就是我在这里问的原因。

4

1 回答 1

1

您实际上可以只发出一个 ajax 请求,并且只向数据库发出一个查询,如下所示:

$(window).load(function() {
    var ids = new Array();
    $("a[count]").each(function(){
        ids.push($(this).attr("count"));
    };
    if(ids.length > 0) {
       var data = {
          action: 'impressions_count',
          postids: JSON.stringify(ids);
       };
       $.post(MyAjax.ajaxurl, data,
           function(response) {
             console.log( response);
       });
    }

 }); 

在 PHP 中

function impressions_count_callback() {
        global $wpdb;
        $post_id = json_decode($_POST['postid']);
        //print_r($post_id);
        $post_id = implode(',', $post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID IN ($post_id)");
}
于 2013-05-04T16:19:39.963 回答