Php 多个AJAX请求提供不一致的数据库更新

Php 多个AJAX请求提供不一致的数据库更新,php,ajax,Php,Ajax,我有一个使用JQueryUI的可排序列表,并使用jqueryeach函数使用AJAX请求将订单保存到基本PHP文件中。请求似乎很好(Firebug控制台),但并非每个请求都被PHP文件保存,更糟糕的是,请求似乎不一致,一些id更有可能失败,但这似乎与它们在列表中的位置有关!真的很奇怪,有什么想法吗 我尝试过GET/POST、sync/async,没有任何区别 Javascript function SaveChanges() { priority = 0; $("

我有一个使用JQueryUI的可排序列表,并使用jqueryeach函数使用AJAX请求将订单保存到基本PHP文件中。请求似乎很好(Firebug控制台),但并非每个请求都被PHP文件保存,更糟糕的是,请求似乎不一致,一些id更有可能失败,但这似乎与它们在列表中的位置有关!真的很奇怪,有什么想法吗

我尝试过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';

您可以将ID作为列表发送,以便将AJAX请求最小化为单个请求。
(由于您将同时发送所有ID,因此不需要发送优先级..您可以处理该服务器端)

和(类似这样,因为我不精通PHP)


与其执行60个AJAX请求,不如创建一个列表,并以JSON字符串的形式提交一个请求?为什么它不能作为60个请求工作?或者这只是一个建议。性能不是问题,但更改方法可能会使其正常工作。让我难倒了!JSON,两个逗号分隔的参数(一个用于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'
          });
}
$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++;
}