Send file отловить ответ на JS
Сделал отправку файла так
<form enctype="multipart/form-data" action="PostTest.CGI" method="post">
Send this file: <input name="filename" id="Id_iput_file" type="file">
</form>
<input type="submit" onClick="Test();" value="Send File">
Как отловить в JS, ответ который отправил сервер ? Ну и сделать так что бы он просто вывелся alert'ом, без перехода на новую страницу PostTest.CGI |
|
Ясно, видать проще не как, я уже тоже в эту сторону покопал,застрял на том моменте как из input в js файл передать, т.е как до данных добраться.
|
На самом деле это не такая тривиальная задача, как может показаться на первый взгляд.
Вот код, который должен осуществлять отправку данных на сервер (не тестировал, могут быть даже синтаксические ошибки):
//У формы должен быть класс "async"
$('form.async').submit(function(e){
e.preventDefault();
var $form=$(this),
$submit=$('['type="submit"]');
if($submit.attr('disabled')!==undefined)
return;
$submit.attr('disabled',true);
new Promise(function(resolve,reject){
var $files=$form.find('[type="file"]'),
files=[],
list=$files.toArray().reduce(function(arr,item){
for(var i=0;i<item.files.length;i++)
arr.push(item.files[i]);
return arr;
},[]),
counter=0,
readEnd=function(){
if(++counter>=list.length)
resolve(files);
};
if(!$files.length)
return resolve(files);
$.each(list,function(file){
(function(file){
var fReader=new FileReader();
fReader.onerror=function(e){
readEnd();
alert('Не удалось прочитать файл');
};
fReader.onload=function(e){
readEnd();
files.push({
name:file.name,
code:this.result
});
};
fReader.readAsDataURL(file);
})(file)
});
}).then(function(files){
var data=$form.serialize();
if(files.length)
data+'&'+files.map(function(item,i){
return 'file['+i+'][name]='+encodeURIComponent(item.name)
+'&file['+i+'][code]='+item.code;
});
$.post($form.attr('action'),data,function(res){
//Handle answer
});
},function(){
alert('Произошла ошибка');
});
});
|
Nexus,
а надо ли делать через readAsDataURL? для отправки на сервер есть FormData, с ней все будет просто, а главное, синхронно (асинхронным будет только аяксовый запрос отправки этой само формдаты). Поддержка браузерами такая же, как у FileReader - ИЕ10+ Если не повезло, и надо поддержать старое, то только через скрытый ифрейм (в jquery и прочих это реализовано давно). Цитата:
|
Alexandroppolus, спасибо за информацию)
О "FormData" я никогда не слышал, поэтому FileReader. Цитата:
|
| Часовой пояс GMT +3, время: 09:38. |