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

私のシステムであなたのコードを複製しようとしました。そしてそれは魅力のように機能します..

上記の機能を実現するために、次の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 リクエストが正しく受信されました。

于 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 に答える
0

私はIE 10のみで同様の状況に直面しました。パラメータを変更しない後続のリクエストでは、サーバーに送信されず、キャッシュされたものと見なされます。

Cache-Control: no-cache私の場合の解決策は、サーバーからヘッダーを送り返すことでした。これにより、懸念事項がより明確に分離されます。

ASP.Net で追加する必要があります

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

または

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

また

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    

問題を解決しました。

于 2013-09-12T13:19:31.200 に答える
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 に答える
0

私が IE 10 以降で見つけた最大の問題は、使用している JQuery のバージョンです。使用しているバージョンについて言及していないため、JQuery 2.X バージョンを使用していることを確認する必要があります。

Jquery 1.X Branch は、バージョン 8 以下の IE ブラウザー用です。JQuery 2.X ブランチは、IE9+ ブラウザー、Chrome、および FF 用です。Safariでは試していません。

また、使用している Jquery Forms のバージョンが JQuery 2.x と互換性があることを確認してください。

詳細については、jquery.com /download の JQuery ダウンロード ページの情報を参照してください。

于 2013-09-20T21:10:10.377 に答える