$ .ajaxSetup({async:false})无法在IE中运行

时间:2013-10-11 09:02:19

标签: javascript jquery ajax internet-explorer

要实现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中显示。

请帮帮我。

2 个答案:

答案 0 :(得分:1)

ajaxForm 插件使用Iframe而不是ajax进行文件上传 所以使用async参数是没用的

答案 1 :(得分:0)

使用asynchronous:false 确实锁定了IE中的UI(还有一些 其它浏览器)。在这种情况下,即使你告诉它显示 图片,它可能没有时间实际这样做(浏览器 通常在UI锁定之前排队这些东西)因为 同步通话。

最好的答案可能不是使用同步呼叫,而是使用同步呼叫 使用iframe垫片或其他东西来制作页面上的所有内容 呼叫正在进行时无法点击。同步调用锁定 所有与IE相关的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)