批量发送大量数据

时间:2015-07-31 09:37:31

标签: jquery ajax csv batch-processing

我使用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请求一次全部触发。我希望他们一个接一个地开火。如何在上一批完成后才发送下一批次?

1 个答案:

答案 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()。