我使用jQuery AJAX来更新表。但是AJAX只能第一次运行,其他请求消失了。
JavaScript的
function uploadItems(data, step, savetype) {
data.append('step', step); data.append('savetype', savetype);
data.append('new_store_id', store_id);
$.ajax({
url: "order_store_edit.php?store_id="+store_id,
type: "POST",
data: data,
contentType: false,
processData: false,
async: true
})
.done(function(data)
{
console.log(data);
})
.fail(function(xhr, text_status, errorThrown)
{
return false;
});
}
PHP
foreach ($set_item_arr as $i => $value) {
order_item_up($item[$i]['item_id'], $value);
echo $item[$i]['item_id'] . ' : ' . $value['disable'] . "\n";
}
MySQL的
function order_item_up($item_id, $set_arr)
{
if (! isset($item_id)) {
echo 'no id';
return;
}
global $db;
$sql = 'UPDATE tablename SET ';
foreach ($set_arr as $key => $val) {
$sql .= $key."='".$val."', ";
}
$sql = substr($sql, 0, -2);
$sql .= " WHERE item_id = '$item_id'";
return $db->execute($sql);
}
例如,我有20个表单,我将其中的10个附加到一个FormData,然后调用uploadItems。因此它会发送两次,但更新查询仅适用于第一次。
没有显示错误消息,控制台中没有,浏览器中没有。
这个问题的可能原因是什么?
编辑:
是否可能由表级锁定引起?我的引擎是MyISAM。
编辑:编辑SQL查询的结果
XHR finished loading:
983 : 1
984 : 1
985 : 1
986 : 1
987 : 1
988 : 1
989 : 1
990 : 1
991 : 1
992 : 1
XHR finished loading:
no id : 1
no id : 1
正如我所提到的,第二个XHR无法更新数据库。
我发现了问题...我应该使用item_id而不是数组索引,因为更新数据库后数组大小会有所不同。
function order_item_up($item_id, $set_arr)
{
foreach ($set_arr as $key => $val)
{
$qry1="UPDATE tablename SET". $key."='".$val."' where $item_id='".$item_id."'";
$re=mysql_query($qry1)or die(mysql_error());
}
}
将此更新部分用于no.of行。