2013-10-11 4 views
-2

Чтобы реализовать загрузку файла ajax, я использую следующий код, который отлично работает в Firefox, но не работает в IE. Мне нужна синхронная работа; Для этой цели я использовал:

$.ajaxSetup({ async: false }); 
//file upload code in ajax call 

for (i = 0; i < fileCnt; i++) {      
    if ($('#addFile' + i).length > 0) { 
     $.ajaxSetup({ async: false }); 
     $('#addFile'+i).ajaxForm(options); 
     $('#addFile'+i).submit(); 
     console.log(files); 
    } 
} 

модифицированный код с SetTimeout

for(i=0;i<fileCnt;i++){      
if ($('#addFile'+i).length > 0) { 
         $('#addFile'+i).ajaxForm(options); 
        $('#addFile'+i).submit(); 
        window.setTimeout($('#addFile'+(i+1)).bind($('#addFile'+(i+1))), 0.1); 
        console.log(files);    
       } 
      } 

Моя консоль показывает информацию о файле в Firefox, но это не показано в IE.

Пожалуйста, помогите мне.

+7

Вы не должны использовать синхронные запросы с ajax. если вы думаете, что вам нужно, вы, вероятно, делаете это неправильно. –

+0

+1! Не делай этого! –

+0

вам нужно добавить ** много ** подробнее – Liam

ответ

1

ajaxForm плагин делает загрузку файла с использованием iframe не ajax.
Таким образом, используя параметр асинхронной бесполезно

+0

Yah использует iframe мое требование после загрузки файла, я пытаюсь получить сохраненный идентификатор файла в объявленный файл [], используя это, я выполнил другое действие – user2590163

0

Использование асинхронного: ложные действительно запирает UI в IE (и некоторые другие браузеры ). В этом случае, даже если вы сказали ему показать изображение , вероятно, не успели это сделать (браузеры обычно ставят в очередь эти вещи) до того, как пользовательский интерфейс заблокируется из-за синхронного вызова .

Лучший ответ, вероятно, не использовать синхронный вызов, а использовать IFrame подкладку или что-то, чтобы сделать все, что на странице unclickable в то время как в процессе вызова. Блокировка синхронных вызовов все Пользовательский интерфейс, связанный с этим процессом IE, а не только с вашей страницей, , тогда как прокладка iframe просто делает вашу страницу незаметной (и предоставляет возможность показать вам немного тусклый или что-то еще). Это тоже очень просто.

setTimeout call (directly, or via one of Prototype's useful wrappers 
like Function#defer and Function#delay; Function#defer is just 
Function#delay with a 0.1 delay time) 
+0

Я реализовал setTimeout выше, я получаю эту ошибку SCRIPT438: объект не поддерживает свойство или метод «push» jquery-1_7.js, строка 3008 символов 5 – user2590163

+0

Кажется, вы включаете jQuery дважды. –

Смежные вопросы