我正在学习php和Ajax,同时为wordpress创建插件,设法完成它。它会计算网站上所有横幅所获得的点击次数和展示次数。你通过插件等放置横幅......无论如何,我刚刚完成了每个横幅获得的印象数量。它没有任何问题。但是,正如我自己做的那样而不是一些教程,我想知道这是正确的方法:
$(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个baners那5个请求。如果我在一个请求中发送所有内容,它会有什么不同吗,因为即使这样我也必须在db查询中执行foreach循环,所以我会再次执行5个db查询,除非它可以一次性完成。
P.S。即使我在WP工作,我相信这更像是php / ajax问题,这就是我在这里问的原因。
答案 0 :(得分:1)
您实际上只能向DB发出一个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)");
}