Диалог jqueryui не открывается, пока не завершится вызов ajax (только для IE) - PullRequest
3 голосов
/ 04 августа 2011

У меня есть веб-приложение, в котором одним нажатием кнопки выполняется куча работы на сервере.Эта работа инициируется вызовом ajax, и перед этим вызовом я отображаю диалоговое окно jquery ui, содержащее анимированный GIF-файл, чтобы пользователь знал, что происходит.Как только работа завершена, возвращается вызов ajax и диалог закрывается.У меня проблема в том, что в IE 7/8 диалог никогда не открывается.Если я удаляю код, который закрывает диалоговое окно из обратного вызова, то после завершения вызова диалоговое окно отображается, что не очень полезно.

Вот определение моего диалога:

$("#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:

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");
    }
});

Для возврата вызова ajax может потребоваться до минуты, но при такой конфигурации я никогда не вижу диалоговое окно.Если я удаляю ("#dgImporting"). Dialog ("закрыть");из обратного вызова я увижу диалоговое окно, но только после завершения вызова ajax, даже если я вызываю диалоговое окно («open») до вызова ajax.

В Firefox и Chrome это работает, как и ожидалосьдействительно нужно, чтобы это работало в IE.У любого гуру JavaScript есть идеи, что я могу сделать?

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Похоже, это может быть настройка async: false. Из документации :

async Boolean

По умолчанию: true

По умолчанию все запросы отправляются асинхронно (т. Е. По умолчанию установлено значение true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

Попробуйте вынуть его и проверить снова.

0 голосов
/ 27 июля 2012

Другим способом решения этой проблемы, и при этом по-прежнему используются синхронные вызовы ajax, является помещение элемента dialog.open в событие mousedown вместо click.

Таким образом, вы все еще можете делать то, что IE (8) не нравится, когда вы помещаете его в функцию обратного вызова, например, скачивание файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...