2013-05-04 54 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