我正在努力弄清楚为什么触发AJAX通话的onblur需要很长时间才能完成。有时需要几十秒钟。似乎我所拥有的“描述”字段越多,所需的时间就越长。任何人都可以查看这段代码,并告诉我他们是否认为我错过了什么?
var description;
var id;
$(".description").live('blur',function() {
var success;
var dataType;
$(".dynamic_row,<?php echo $services; ?>").each(function() {
var row = $(this);
var id = row.find(".id").val() || 0;
var description = row.find(".description").val() || "";
var q = <?php echo $q; ?>;
$.ajax({
type: "POST",
url: 'setdescname.php',
data: {ider:id, descriptionr:description, qr:q},
success: function(result) {
if(result.isOk == false)
alert(result.message);
},
dataType: dataType
});
});
});
<?php echo $services; ?>
提取由复选框激活的大约16个可能的动态行名称。那部分工作得很好......
这是setdescname.php
中的代码require_once('include/database.php');
if (!dbConnect()) {
echo 'Error connecting to database';
exit;
}
$id = $_POST['ider'];
$description = $_POST['descriptionr'];
$q = $_POST['qr'];
$qry = "UPDATE items SET description = '".$description."' WHERE id = '".$id."'";
$result = mysql_query($qry) or die(mysql_error());
如果您认为这很重要,我的代码中有以下内容。
$.ajaxSetup({async:false});
$.ajaxSetup({cache:false});
这是必需的,因为所有用户都将在IE中,它将缓存ajax调用,在没有必要功能的情况下添加新的“动态”字段(在新添加时恢复mysql_insert_id()
)。 / p>
所有这一切都有效,它只是非常缓慢......
我将不胜感激任何建议或意见。感谢。
答案 0 :(得分:0)
快速需要ajax缓存和ajax async
Ajax缓存
$ .ajax({url:'/?= testDefault', 数据:{'缓存':'默认'} }); //没有时间戳
$.ajaxSetup({ cache: false });
$.ajax({ url: '/?=testFalse/',
data: { 'cache': 'false' }
});//yes, a timestamp
$.ajaxSetup({ cache: true });
$.ajax({ url: '/?=testTrue/',
data: { 'cache': 'true' }
}); //no timestamp
对于Ajax异步
$.ajax({
url: "super.php",
data: "a="+a,
type: "POST",
async: false,
success: function(data) {
alert(data);
}
});
答案 1 :(得分:0)
您应该重构您的解决方案,以便在一个请求中将所有数据发送到脚本。实际上没有执行大量请求(特别是因为您拥有服务器代码)。
为了帮助您入门:
var description;
var id;
var dataBuf = [];
$(".description").live('blur',function() {
var success;
var dataType;
$(".dynamic_row,<?php echo $services; ?>").each(function() {
var row = $(this);
var id = row.find(".id").val() || 0;
var description = row.find(".description").val() || "";
var q = <?php echo $q; ?>;
dataBuf.push({"ider" : id, "descriptionr" :description, "qr" :q};
});
// now send it all as one request:
$.ajax({
type: "POST",
url: 'setdescname.php',
data: {"data": JSON.stringify(dataBuf)},
success: function(result) {
if(result.isOk == false)
alert(result.message);
},
dataType: dataType
});
});
在服务器上:
<?php
$data = json_decode($_POST['data']);
foreach($data as $row) {
echo $row['ider'];
echo $row['descriptionr'];
echo $row['qr'];
// etc.
// do stuff with data, store in DB
// for example
}
P.S。 - 即使您的请求是异步触发,也会遇到性能问题,因为浏览器允许的并发XHR请求数量仅限于少数。