2013-05-04 53 views
0

我正在学习php和Ajax,同时为wordpress创建一个插件,并设法完成它。它计算网站上所有横幅获得的点击次数和展示次数。 U通过插件等插入横幅...无论如何,我刚刚完成添加每个横幅获得的印象数量。它工作没有任何问题。但是,当我这样做我自己,而不是一些教程,我想知道这是做正确的方式: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); 
     }); 
    }) 
}); 

这里是一个代码部分,更新DB

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'"); 
    } 

为u可以看到我在网站上发送每个baner的ajax请求,所以如果我有5个baners那就是5个请求。如果我将它全部发送到一个请求中,它会有什么区别吗?因为即使这样我也必须在db查询中做foreach循环,所以我会再次执行5分贝查询,除非它可能一次完成。

P.S.即使我在WP工作,我相信这是更多的PHP/AJAX问题,这就是为什么我问这里。

+0

当你点击旗帜,它重定向你到首页? – 2013-05-04 15:42:48

+0

否点击是好的,这是在页面加载时捕获展示次数。 – 2013-05-04 15:49:54

+0

啊我明白了。那么为什么不在用户加载的页面中放置“印象”代码呢? – 2013-05-04 15:54:39

回答

1

其实你可以做只有一个Ajax请求,并只有一个查询到DB像这样的东西:

$(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)"); 
} 
+0

嗯我收到数组没有定义错误 – 2013-05-10 12:31:54

+0

谢谢,因为这是jQuery,我刚刚添加var ids = [];并像魅力一样工作。 – 2013-05-10 12:51:41