我使用jQuery CSV导入程序导入CSV文件。在我处理完导入后,我有一个对象,其中包含每行的对象,如下所示:
{
{
'name':'foo',
'surname':'bar',
'tel':'0123456789'
},
{
...
}
}
因为csv文件可能有10行或1000行,所以我现在想要将这些数据批量发送到服务器。我已经有了一个将对象分成几部分然后发布的功能。
/**
* @method sendChunks Sends data in chunks to the micro-service
* @param object {object} Data that needs to be sliced up and sent
* @param size {int} Size of chunks
* @param endpoint {string} Where the data needs to be sent
* @param callback {function} Callback function when all pieces are sent.
*/
function sendChunks(object,size,endpoint,callback) {
var counter = 0,
total = 0,
sendObj = {
'source':config.source,
'country_code':config.country_code,
'language_code':config.language_code,
'batch_data': [],
};
objectLength = object.count();
$.each(object, function (i, obj) {
total++;
if(counter < size && total != objectLength) {
counter++;
sendObj.batch_data.push(obj);
} else {
$.ajax({
url: 'some_url',
type: 'post',
data: sendObj,
success: function(data) {
if(total == objectLength) {
setNotification('Import completed','Contact was successfully imported.','panel-success panel');
}
}
});
if(total == objectLength) {
if(typeof callback == 'function') {
callback();
} else {
console.log('failed to call function');
}
}
counter = 1;
sendObj.batch_data = []
}
})
},
问题是,ajax请求一次全部触发。我希望他们一个接一个地开火。如何在上一批完成后才发送下一批次?
答案 0 :(得分:0)
将async: false
参数添加到您的ajax调用中:
$.ajax({
url: 'some_url',
type: 'post',
async: false, // <== one by one
...
async (默认值:true)
类型:布尔值
默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred);您必须使用success / error / complete回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success()。