2013-05-04 5 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); 
     }); 
    }) 
}); 

и вот одна часть кода, которая обновляет БД

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

при и- может видеть, что я отправляю запрос ajax для каждого баннера на сайте, поэтому, если у меня есть 5 баннеров, то 5 запросов. Разве это будет иметь значение, если я отправил все это в один запрос, так как даже тогда мне нужно было бы сделать цикл foreach в db-запросе, поэтому я снова сделаю запросы 5 db, если это не удастся сделать это за один раз.

P.S. Даже если я работаю в WP, я считаю, что это больше вопрос php/ajax, поэтому я спросил здесь.

+0

При нажатии на баннер, это перенаправление вы на главную страницу? –

+0

Нет. Клики в порядке, это захват показов при загрузке страницы. –

+0

А я вижу. Так почему бы не создать код «показов» на странице, загруженной пользователем? –

ответ

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

hmm Я получаю массив не определено error –

+0

Спасибо, поскольку это был jquery, я просто добавил var ids = []; и работал как шарм. –

Смежные вопросы