Вызов $ .ajax в веб-службу asmx (на том же сайте) работает в IE, но не работает в FF и Chrome - PullRequest
1 голос
/ 20 декабря 2011

Прежде всего, я не верю, что мой вопрос является дубликатом этого .Вызывающие страницы и веб-служба asmx находятся на одном веб-сайте, на одном иерархическом уровне, и у страниц есть разрешение на доступ к файлу asmx.

Теперь перейдем к моему вопросу.

У меня есть веб-сайт, который я разрабатываю, который выполняет несколько длительных процессов на SQL Server.Я решил, что стандартного ajaxloader.gif недостаточно для моих нужд, потому что задачи могут занимать различное количество времени (от 15 секунд до 5+ минут).

Итак, я разработал систему из 2Веб-службы для обработки отображения фактического прогресса для пользователя.Первый веб-сервис выполняет свою работу, обновляя общую переменную в классе Service.Второй веб-сервис вызывается каждые полсекунды или около того (иногда я устанавливаю интервал в 100 мс) и считывает значения прогресса из общей переменной.

Теперь эта система прекрасно работает в IE (I 'я работаю с IE9), но, похоже, полностью провалился в FF и Chrome (как в Windows, так и в OS X).Он также не работает в Safari на OS X.

Я пытался начать учиться отладке в браузерах, отличных от IE, но я борюсь там (возможно, поэтому я не могу понять это).Я установил точки останова в своем коде JavaScript / jQuery, но они никогда не срабатывают.Я устанавливаю области «отладчика» в своем коде JS / jQuery, и они останавливают IE, но не останавливают FF и Chrome (что, я думаю, кажется «правильным» поведением).Итак, я установил точки останова в моем файле с выделенным кодом Service, и они, похоже, срабатывают примерно 1 раз из 3. Таким образом, он не дает полного отказа, но часто терпит неудачу.Как я уже говорил, это не сбои на IE.Я попытался отладить это в FireBug на FireFox (Windows), но я не смог получить полезную информацию из кода ошибки.Насколько я могу судить, я просто получаю сообщение об ошибке с ErrorText = "error".(Не полезно!)

Вот мой код jQuery:

function LongRunningProcess() {
    debugger;
    $('#progressBar').show();
    $('#progressLabel').show();
    var b = $('#<%= startDateTextBox.ClientID %>').datepicker("getDate");
    var e = $('#<%= endDateTextBox.ClientID %>').datepicker("getDate");
    var bString = (b.getMonth() + 1) + '/' + b.getDate() + '/' + b.getFullYear();
    var eString = (e.getMonth() + 1) + '/' + e.getDate() + '/' + e.getFullYear();
    var params = '{beginningDateString:"' + bString + '", endingDateString:"' + eString + '"}';
    $.ajax({
        type: "POST",
        url: "Service.asmx/LongRunningProcess",
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: Returned,
        error: ShowError
    });
    GetProgress();
}
function GetProgress() {
    $.ajax({
        type: "POST",
        url: "Service.asmx/ShowProgress",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: ProgressReturned,
        error: ShowError
    });
}
function Returned(missing) {
    // This code isn't important/doesn't affect my question,
    // but it does exist and catch the return in IE
}
function ProgressReturned(progress) {
    $('#progressBar').progressbar("option", "value", progress.d.Progress);
    $('#progressLabel').html(progress.d.Step + ' (' + progress.d.Progress.toFixed(2) + '%)');
    if (progress.d.Progress < 100) {
        setTimeout(GetProgress, 100);
    } else {
        $('#progressBar').progressbar("option", "value", 0);
        $('#progressLabel').html('Done.');
        $('#progressBar').hide();
        $('#progressLabel').hide();
    }
}
function ShowError(request, error) {
    debugger;
    alert(error);
}

Я новичок в веб-программировании на ASP.NET и очень плохо знаком с JavaScript и jQuery, но я попыталсясделать хорошее исследование и выяснить, как эти вещи работают.Плюс, как я уже сказал, приведенный выше код прекрасно работает (именно так, как я хочу) в IE9.Кроме того, в браузерах, отличных от IE, точка останова, установленная в первой строке «Service.asmx / LongRunningProcess», редко запускается / встречается.Итак, я не думаю, что ошибка кода в моем коде VB.NET, поэтому я не опубликовал ее.У меня есть синтаксическая ошибка или что-то?

1 Ответ

0 голосов
/ 24 января 2012

Насколько я могу судить, это было просто "возвращение ложного"; что я скучал.

...