Прежде всего, я не верю, что мой вопрос является дубликатом этого .Вызывающие страницы и веб-служба 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, поэтому я не опубликовал ее.У меня есть синтаксическая ошибка или что-то?