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

时间:2012-02-23 10:58:07

标签: php ajax

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

我尝试过GET / POST,同步/异步,没有任何区别。

的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请求,并为每个请求返回SUCCESS。如果相关,大约有60个项目。

1 个答案:

答案 0 :(得分: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++;
}