5

背景

我想提交一个表格,留在同一页面上并获得回复。

下面提到的代码在 Chrome、Safari 和 Firefox 中完美运行。但是它在 IE10 中不起作用。

如何让它在 IE10 中运行?

我的分析正确性=“有问题”

在 IE10 中,$('#amazonUpload').ajaxSubmit(options)执行了,但是在服务器端没有收到 Ajax 请求,因此在客户端永远不会收到响应。

HTML

<form action="https://s3.amazonaws.com/adminportal" enctype="multipart/form-data" id="amazonUpload" method="post">   
    <input name="key" type="hidden" value="001e0000009vkRLAAY/Forms/${filename}" />             
    <input name="AWSAccessKeyId" type="hidden" value="client aws key" /> 
    <input name="policy" type="hidden" value="really long string" /> 
    <input name="signature" type="hidden" value="sign value=" />             
    <input name="acl" type="hidden" value="private" /> 
    <input name="Content-Type" type="hidden" value="application/octet-stream"/>
    <div id="uploadPage:block:j_id31"><div class="pbSubsection">      
    <input id="uploadfileOne" name="file" required="True" size="25" type="file" />
    <input class="btn" id="myBtnId55" name="myBtnId55" onclick="uploadActComplete();" style="display:none;" type="button" value="Upload" />     
</form>

JavaScript

function uploadActComplete(){
    loading();     
    var options = { 
    //      error: errorResponse,
    //       success: successResponse,
    complete: function(xhr, status) {
        alert('status is :- '+status );
        if(status =='success')
            successResponse(xhr, status);
        else if(status =='error')
            errorResponse(xhr, status);
    }
    }; 
    $('#amazonUpload').ajaxSubmit(options); 
    return false;
}

function errorResponse(xhr, status)  {     
    stoploading();    
    alert('File could not be uploaded, please try again.'); 
} 
function successResponse(xhr, status)  {     
    stoploading();    
    $("input[id$='invisiblesubmit']").click();
}
4

8 回答 8

5

I have tried replicating your code on my system. and it works like a charm..

i have used following jquery files to achieve the above functionality.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> 
<script src="http://malsup.github.com/jquery.form.js"></script>

Please check if you are using correct jquery files.

I have also tried posting to a local file and ajax request was correctly received there.

于 2013-09-19T11:51:10.843 回答
3

你试过这个吗?

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" >

更多信息在这里:http ://code.gishan.net/code/solution-to-ie10-ajax-problem/

@Daniel Schwarz,也回答了。:)

于 2013-09-17T16:33:46.600 回答
1

使用 fiddler 分析您的 ajax 调用 - 它会告诉您是否确实进行了调用。

于 2013-09-23T00:51:18.020 回答
1

尝试在对我有用的页面的 head 标记内添加元标记:-

<meta http-equiv="x-ua-compatible" content="IE=9" >

IE10 像 IE9 一样工作

于 2013-09-16T13:16:14.043 回答
0

I faced the similar situation with IE 10 only. In subsequent request with no change in parameter is not sent to server & considered as cached one.

The solution in my case was to sending back a Cache-Control: no-cache header from your server. It provides a cleaner separation of concerns.

In ASP.Net I need to add

HttpContext.Current.Response.AddHeader("Cache-Control", string.Empty);

Or

HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");

OR

Response.AppendHeader("Cache-Control", "no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1    

It resolved the problem.

于 2013-09-12T13:19:31.200 回答
0

我在 IE 10+ 中发现的最大问题是您使用的 JQuery 版本。由于您没有说您使用的是哪个版本,您应该验证您使用的是 JQuery 2.X 版本。

Jquery 1.X 分支适用于 IE 浏览器版本 8 或更低版本。JQuery 2.X 分支适用于 IE9+ 浏览器、Chrome 和 FF。我还没有在 Safari 上尝试过。

还要验证您使用的 Jquery Forms 版本是否与 JQuery 2.x 兼容

有关更多信息,请阅读jquery.com/download上的 JQuery 下载页面上的信息

于 2013-09-20T21:10:10.377 回答
0

您可以将时间戳附加到作为 GET 参数请求的 URL 的末尾。这就是我绕过 IE 缓存的方法。

var date = new Date();
var options = { 
    url: $('#amazonUpload').attr('action')+'?time='+date.getTime(),
    // Your other options
}
$('#amazonUpload').ajaxSubmit(options); 
return false;
于 2013-09-18T19:37:15.097 回答
0

跟进@amrinder007 的回答,您可以尝试这种细微的变化

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

否则,还有其他可能有效的选项:

"IE=edge"
"IE=10"
"IE=EmulateIE10"
"IE=9"
"IE=EmulateIE9
"IE=8"
"IE=EmulateIE8"
"IE=7"
"IE=EmulateIE7"
"IE=5"
于 2013-09-17T16:31:22.353 回答