Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery文件上载formData未更新_Jquery_Jquery File Upload_Multi Upload - Fatal编程技术网

jQuery文件上载formData未更新

jQuery文件上载formData未更新,jquery,jquery-file-upload,multi-upload,Jquery,Jquery File Upload,Multi Upload,我已经读过了,事实上它很管用。但我试图完成的是在每次发送块时更新formData,因此新数据将与块一起发送到服务器 这就是我尝试过的: $('#upload').fileupload({ maxChunkSize: 100000, // 100KB formData: {UploadID: 'just testing'}, }).bind('fileuploadchunkdone', function (e, data) { UId = data.jqXHR.respon

我已经读过了,事实上它很管用。但我试图完成的是在每次发送块时更新formData,因此新数据将与块一起发送到服务器

这就是我尝试过的:

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    formData: {UploadID: 'just testing'},
}).bind('fileuploadchunkdone', function (e, data) {
    UId = data.jqXHR.responseJSON.files[0].UploadId;
    console.log(UId); // Confirmed, it does have the data sent back by the server
    data.formData = {UploadID: UId}; // It updates, but doesn't send the new data
}).bind('fileuploadchunksend', function (e, data) {
    // tried the same here, but no luck
});
使用Firebug,我可以看到发送到服务器的数据。第一个区块正确发送formData,但第二个区块再次发送相同的数据

我还尝试了作者描述的内容,但是重写
send
处理程序不起作用,因为它只发生在第一个块上


您知道如何实现这一点吗?

尚未对此进行测试,但您可以在更大范围内定义
UId
变量,并在每次调用时更新它:

var UId = 'just testing';  

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    formData: function(){
        return [{UploadID: UId}];
    }
}).bind('fileuploadchunkdone', function (e, data) {
    UId = data.jqXHR.responseJSON.files[0].UploadId;
});

不确定这是否是实现这一目标的正确方法。但以下是我所做的:

var UId = 'just testing'; 

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    //formData: {UploadID: UId} REMOVED      
}).bind('fileuploadchunkdone', function (e, data) {
    // UId is set after the chunk is done
    UId = data.jqXHR.responseJSON.files[0].UploadId;
}).bind('fileuploadchunksend', function (e, data) {
    // and append UploadId
    // Yes, append, not override
    data.data.append('UploadId', UId);
    // This will also be fired on the first chunk upload
    // so it is better to set UId in a greater scope as koala_dev said
}
正如我所说,我不知道这是否正确。但它奏效了


注意,我已经从初始设置中删除了
formData:{UploadID:UId}
。保持它在那里会使每个块发送两次
UploadID
,首先在块的顶部(在文件数据之前)发送一个不可更改的值,然后在块的底部(在文件数据之后)发送一个新的值。

@rlcabral我已经更新了上面的代码,尝试将formData选项设置为functionNop,它发送“undefined”,虽然设置了UId。我尝试只发送第一个块,也发送每个块。在任何块上都是一样的。现在我将继续使用
data.data.append()
。丑陋,但有效。