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