JQuery Ajax не работает в IE10

Фон

Я хочу отправить форму, остаться на той же странице и получить ответ.

Нижеприведенный код отлично работает в Chrome, Safari и Firefox. Однако это не работает в IE10.

Как заставить его работать в IE10?

Мой анализ correctness="questionable"

В 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();
}

person Ganesh Bhosle    schedule 12.09.2013    source источник
comment
попробуйте это на ‹head› ‹мета http-equiv=x-ua-совместимый контент=IE=9 ›   -  person Alessio Koci    schedule 22.09.2013
comment
находится ли статус запроса «в ожидании» на сетевой вкладке инструментов разработчика?   -  person c2h5oh    schedule 23.09.2013


Ответы (8)


Я попытался воспроизвести ваш код в своей системе. и это работает как шарм ..

Я использовал следующие файлы jquery для достижения вышеуказанной функциональности.

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

Пожалуйста, проверьте, используете ли вы правильные файлы jquery.

Я также попытался отправить сообщение в локальный файл, и там был правильно получен запрос ajax.

person Sunil Verma    schedule 19.09.2013

Вы пробовали это?

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

Дополнительная информация здесь: http://code.gishan.net/code/solution-to-ie10-ajax-problem/

@ Даниэль Шварц, тоже ответил. :)

person TheAshwaniK    schedule 17.09.2013

Попробуйте добавить метатег внутри тега заголовка вашей страницы, который сработал для меня: -

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

IE10 работает как IE9

person amrinder007    schedule 16.09.2013

Используйте fiddler для анализа ваших вызовов ajax - он скажет вам, был ли вызов сделан или нет.

person Dave Hilditch    schedule 23.09.2013

Я столкнулся с подобной ситуацией только с IE 10. В последующем запрос без изменения параметра не отправляется на сервер и считается кешированным.

В моем случае решением было отправить заголовок Cache-Control: no-cache с вашего сервера. Это обеспечивает более четкое разделение задач.

В ASP.Net мне нужно добавить

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    

Это решило проблему.

person Pranav Singh    schedule 12.09.2013
comment
спасибо за повтор. Я разрабатываю с помощью salesforce.com. У меня нет контроля над заголовками. Следовательно, хотя ваш ответ может решить проблему, я даже не смогу это попробовать. - person Ganesh Bhosle; 12.09.2013

В продолжение ответа @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"
person Daniel Schwarz    schedule 17.09.2013

Вы можете добавить временную метку в конец запрашиваемого URL-адреса в качестве параметра GET. Вот как я обошел кеширование IE.

var date = new Date();
var options = { 
    url: $('#amazonUpload').attr('action')+'?time='+date.getTime(),
    // Your other options
}
$('#amazonUpload').ajaxSubmit(options); 
return false;
person Nick    schedule 18.09.2013

Самая большая проблема, которую я обнаружил в IE 10+, — это версия JQuery, которую вы используете. Поскольку вы не указали, какую версию используете, вам следует убедиться, что вы используете версию JQuery 2.X.

Ветвь Jquery 1.X предназначена для браузеров IE версии 8 или младше. Ветка JQuery 2.X предназначена для браузеров IE9+, Chrome и FF. С сафари не пробовал.

Также убедитесь, что используемая вами версия Jquery Forms совместима с JQuery 2.x.

Для получения дополнительной информации прочитайте информацию на странице загрузки JQuery по адресу jquery.com/download.

person QuadRunner    schedule 20.09.2013
comment
Это не совсем точно. Ветка jQuery 1.x не предназначена для IE 8 и ниже. Это для IE 6+. Ветка jQuery 2.x предназначена для IE 9+. - person War10ck; 04.03.2014