2014-05-03 137 views
0

我試圖在我的新網站代碼中使用jQuery。目前,對於頁面上「添加」的每個div類,它循環遍歷它們並向我的PHP腳本提交AJAX請求,然後更新數據庫。問題在於,如果用戶創建了100個項目,則會發送100個請求,這是不可接受的。我寧願發送所有數據,所以如果有100個項目,PHP只需循環一個$ _GET數組。jQuery/PHP Foreach Ajax請求

$(".added").each(function() { 
    var position = $(this).position(); 

    $.ajax({ 
     type: "GET", 
     url: "index.php?action=save", 
     data: { 
      id: $(this).attr("id"), 
      top: position.top, 
      left: position.left, 
      img: $(this).attr("image") 
     }, 
     success: function (data) { 
      //alert(data); 
     } 
    }); 
});  

任何解決方案,或者爲那些誰可以送我正確的方向,我會非常感激。

親切的問候。

+0

循環首先,創建您需要的值的數組 - 然後事後發送陣列:在那之後,在PHP中,你可以做以下遍歷的div。 – CBroe

回答

1

在回顧您的需求後,最好創建一個數組來保存每個添加的類的信息。然後,你可以發送這個陣列到服務器(這將是有幫助的數組轉換成JSON,這是一個建議)

var position_array = []; 

$('.added').each(function() 
{ 
    //Get the position of the element  
    var position = $(this).position(); 

    var id = $(this).attr("id"); 
    var top = position.top; 
    var left = position.left; 
    var img = $(this).attr("image"); 

    var object = 
    { 
     'id': id, 
     'top': top, 
     'left': left, 
     'img': img 
    } 

    position_array.push(object); 
}); 

$.ajax(
{ 
    type: "GET", 
    url: "index.php?action=save", 
    data: 
    { 
     add_array: position_array 
    }, 
    success: function (data) 
    { 
      //alert(data); 
    } 
}); 
+0

明智的解決方案,我很高興現在問起這個問題,因爲您剛剛添加了我對使用jQuery處理數組和請求的知識。 – user3600003

1

你可以使用,而不是GET POST方法,路過的時候,這將給你更多的自由PHP的參數。之後,只需在數據字段中傳遞一系列div。

$("#submitDivs").on('click',function() { 


    var divsData = []; 
    $(".added").each(function() { 
     var position = $(this).position(); 
     divsData[$(this).attr("id")] = { 
      id: $(this).attr("id"), 
      top: position.top, 
      left: position.left, 
      img: $(this).attr("image") 
     }; 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "index.php?action=save", 
     data: { divs: divsData }, 
     success: function (data) { 
      //alert(data); 
     } 
    }); 
}); 

此功能將在點擊ID爲'submitDivs'的元素時觸發。通過div的

$divs = json_decode($_POST['divs']); 
foreach($divs as $div){ 
    echo $div['id']; 
} 
+0

一個很好的解決方案,就像上面的答案 - 我已經測試了兩個,他們都似乎做我所需要的。謝謝! – user3600003

0
Simple Way to do this .. just set a timer javascript for your client to do another request().. (only client have charge cpu and server do just one request to 3 sec for one client) 
For good protection you do this in server also .. 

var urls = []; 
var timer = now(); 

onclick(function(){ 
    add_url_in_urls[]($(this).href()); 
]); 
setInterval(function(){ 
    dooooo(); 
},3000); 

function dooooo(){ 

timer = renow(); 

    if (timer > now()){ 
     $(".added").each(function() { // added links or list url in array javascript // 
      var position = $(this).position(); 
      $.ajax({ 
       type: "GET", 
       url: "index.php?action=save", 
       data: { 
        id: $(this).attr("id"), 
        top: position.top, 
        left: position.left, 
        img: $(this).attr("image") 
       }, 
       success: function (data) { 
       //alert(data); 
      } 
     }); 
    });  
} 
} 
(toujours modérer ses actions javascript en functions réutilisables ...)