我在这里有一个队列管理系统的代码片段,它根据允许在屏幕上显示的窗口数量动态地从数据库中获取数据。
var elementArray;
function fetchPayment() {
elementArray = new Array();
$('.win_id').each(function() {
// here's the moneyshot
elementArray.push(this);
});
doAjax(0);
}
function doAjax(param) {
if (typeof elementArray[param] === 'undefined') {
var win_id = 0;
} else {
var win_id = elementArray[param].value;
}
$.ajax({
type: "GET",
dataType: 'json',
// async: false,
url: "<?php echo base_url();?>queue/getCurrentTransaction/" + win_id,
success: function(data) {
param++;
if (param <= elementArray.length) {
$('.names-' + win_id).empty();
$('.names-' + win_id).append("<div class='pname'>" + data.customer_name + '<li>' + data.ref_code + '</li></div>');
doAjax(param);
} else {
console.log("!");
}
},
error: function(data) {
param++;
$('.names-' + win_id).empty();
$('.names-' + win_id).append("<div class='pname'><li></li></div>");
doAjax(param);
}
});
}
然而,这是有效的,它太过CPU密集而且无可否认是一种糟糕的方法,我重构了我的其他功能,使它们像这样:
(function fetchNewServiceConnection() {
setTimeout(function() {
$.ajax({
type: "GET",
dataType: 'json',
url: "<?php echo base_url();?>queue/getCurrentTransaction/" + 100,
success: function(data) {
$('.c_name').empty();
$('.c_name').append(data.customer_name + '<li>' + data.ref_code + '</li>');
fetchNewServiceConnection()
},
error: function(data) {
$('.c_name').empty();
$('.c_name').append('<li></li>');
fetchNewServiceConnection()
}
});
}, 500);
})();
这样做的速度要快得多。问题是上面的代码,我如何将其转换为下面的代码片段?
答案 0 :(得分:2)
在你的
里面function doAjax(param) {
if (typeof elementArray[param] === 'undefined') {
var win_id = 0;
} else {
var win_id = elementArray[param].value;
}
$.ajax({
type: "GET",
// etc....
}
您在两个地方doAjax(param);
,一个用于success:
,另一个用于error:
使用以下内容替换
doAjax(param);
:<强>
setTimeout(doAjax.bind(null, param), 500);
强>
<强> 注意:的强>
我不确定,但看起来您正在尝试 "real time data"
,所以我的建议是查看 WebSockets
(https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API),托管您自己的,或最终提供商,例如Pusher.com(https://pusher.com/)