2011-08-04 8 views
3

ボタンをクリックするだけでサーバー上で作業が行われるWebアプリケーションがあります。この作業はajax呼び出しによって開始され、その呼び出しの前に、アニメーションGIFを含むjquery UIダイアログが表示され、ユーザーに情報が伝わっていることを知らせることができます。作業が完了すると、ajax呼び出しが戻り、ダイアログが閉じます。私が抱えている問題は、IE 7/8ではダイアログが開かないということです。コールバックからダイアログを閉じるコードを削除すると、コールが完了した後にダイアログが表示され、あまり役に立ちません。ここでajax呼び出しが完了するまでjqueryuiダイアログが開かない(IEのみ)

は私のダイアログの定義です:AJAX呼び出しがに数分かかることがあり

function executeImport(importData) { 
importData.carriers = JSON.stringify(selectedCarriers); 
$("#dgImporting").dialog("open"); 
$.ajax({ 
    type: "POST", 
    traditional: true, 
    url: "import/execute", 
    async: false, 
    data: JSON.stringify(importData), 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     $("#dgImporting").dialog("close"); 
    } 
}); 

$("#dgImporting").dialog({ 
    autoOpen: false, 
    width: 250, 
    height: 125, 
    modal: true, 
    resizable: false, 
    position: 'center', 
    closeOnEscape: false, 
    open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); } 
}); 

そして、ここでは、私は私のAJAX呼び出しを実行するために使用しています方法であり、戻りますが、この設定ではダイアログボックスが表示されません。私が削除した場合( "#dgインポート")。ダイアログ( "閉じる");コールバックからダイアログが表示されますが、ajax呼び出しが完了するまでは表示されませんが、ajax呼び出しを行う前にダイアログ(「開く」)を呼び出しています。

FirefoxとChromeでは、これは期待どおり動作しますが、IEで正しく動作させる必要があります。そこにいるJavaScriptの看護師は私が何をすることができるか考えていますか?

+0

最後に、私はこれほど長く苦労してきました。 – mydoghasworms

答えて

3

async: falseのように見えます。

非同期ブール

デフォルト:documentationから真

デフォルトでは、すべての要求が(すなわち、これはデフォルトでtrueに設定されている)非同期に送信されます。同期要求が必要な場合は、このオプションをfalseに設定します。クロスドメインリクエストとデータタイプ: "jsonp"リクエストは同期操作をサポートしていません。 同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間にアクションを無効にすることがあります。

もう一度取り出してテストしてください。

+0

ああ、もちろん。私は非同期の偽が意味を成す別のアプリケーションからそのajaxコードをコピーしました。私はそれを削除し、今はものがうまくいく、ありがとう! – zaq

+1

私はこの旗を誤って追加して、同じ状況で自分自身に上陸しました。しかし、私はいつもFirefoxでテストしていたので、その効果は分かりませんでした。答えをありがとう。 – mydoghasworms

+0

同上 - 私はまったく同じ状況にあり、これが答えでした。 – Zeth

0

この問題を解決するもう1つの方法は、同期のajax呼び出しを使用して、click.wsの代わりに「dialog.open」の部分をmousedownイベントに入れていることです。

IE(8)は、ファイルをダウンロードするときのように、コールバックに入れると好きではありません。

関連する問題