2012-02-23 69 views
1

我有一個使用JQueryUI的可排序列表,並使用JQuery Each函數將AJAX請求保存到基本PHP文件。這些請求似乎沒有問題(Firebug控制檯),但並不是每個人都被PHP文件保存,更糟糕的是它似乎並不一致,有些id更可能失敗,但這似乎與他們的位置有關在列表中!這真的很奇怪,有什麼想法?多個AJAX請求給出不一致的數據庫更新

我試過GET/POST,sync/async,沒有什麼區別。

的Javascript

function SaveChanges() { 
     priority = 0; 
     $("#p_menu li").each(function() { 
      if($(this).attr("class") != "range") { 
       $.ajax({"url": "lib/product-menu-save.php", "data": "pm_id="+this.id+"&priority="+priority, "type": "GET"}); 
       priority++; 
      } 
     }); 
    } 

PHP文件

<?php 

require_once '../includes/adminsession.php'; 
require_once '../lib/mysql.php'; 

$pm_id = $_GET['pm_id']; 
$pm_priority = str_pad($_GET['priority'], 4, '0', STR_PAD_LEFT); 

$save_stmt = $db->prepare("UPDATE products SET priority = ? WHERE id = ?"); 
$save_stmt->bind_param('si', $pm_priority, $pm_id); 
if(!$save_stmt->execute()) echo $save_stmt->error; else echo 'SUCCESS'; 

的數據看起來很好進入的AJAX請求和成功返回爲每個請求。如果相關的話,大約有60個項目。

+1

而不是做60個AJAX請求,爲什麼不創建一個列表並提交一個請求? – 2012-02-23 11:02:33

+0

作爲JSON字符串?爲什麼它不能按60個請求工作?或者這只是一個建議。性能不是問題,但改變方法可能會使它工作。我難住這一個! – MattP 2012-02-23 11:37:53

+0

JSON,兩個逗號分隔的參數(*一個用於ID,一個用於優先級*),任何您認爲可以最小化客戶端 - 服務器通信的方式。 – 2012-02-23 11:40:30

回答

0

您可以將id作爲列表發送,以便將AJAX請求最小化爲單個請求。
因爲你將派遣所有的ID一起,你並不需要發送的優先級..你能處理的服務器端

function SaveChanges() { 
    var id_list = []; 
    $("#p_menu li").each(function() { 
     if($(this).attr("class") != "range") { 
      id_list.push(this.id); 
     } 
    }); 
    $.ajax({ 
      url : 'lib/product-menu-save.php', 
      data : {ids: id_list}, 
      type : 'POST' 
      }); 
} 

和(這樣的事情,因爲我不精通在PHP

$save_stmt = $db->prepare("UPDATE products SET priority = ? WHERE id = ?"); 

$pm_priority_value = 0; 

foreach ($_POST['ids'] as $pm_id) { 

    $pm_priority = str_pad($pm_priority_value, 4, '0', STR_PAD_LEFT); 

    $save_stmt->bind_param('si', $pm_priority, $pm_id); 
    if(!$save_stmt->execute()) echo $save_stmt->error; else echo 'SUCCESS'; 

    $pm_priority_value++; 
}