2012-02-23 70 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++; 
}