2013-11-19 3 views
0

Я уже читал How to submit additional form data и он ведь работает. Но я пытаюсь выполнить обновление formData каждый раз, когда отправляется кусок, поэтому новые данные отправляются на сервер вместе с куском.jQuery File Upload formData not update

Это то, что я пробовал:

$('#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, но второй блок снова отправляет те же данные.

Я также пробовал то, что описано here автором, но переопределение обработчика send не работает, потому что это происходит только на первом куске.

Любая идея, как я могу это достичь?

ответ

1

Не проверял это, но вы можете быть в состоянии определить свою 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; 
}); 
+0

Я пробовал это. Не работает. – rlcabral

+0

@rlcabral Я обновил код выше, попробуйте установить параметр formData как функцию –

+0

Nop, он отправляет 'undefined', хотя UId установлен. Я попытался отправить только на первый кусок, а также на каждый кусок. То же самое на любом куске. На данный момент я буду придерживаться 'data.data.append()'. Уродливый, но работает. – rlcabral

0

Не уверен, что это правильный путь для достижения этой цели. Но вот что я сделал:

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 дважды, сначала в верхней части фрагмента (перед файловыми данными) с неизменяемым значением, а затем в нижней части фрагмента (после данных файла) с новым значением.