Каков подходящий метод получения согласованного ответа для данных innerHTML с использованием $ .get на разных платформах браузера? - PullRequest
0 голосов
/ 05 апреля 2019

Учитывая следующий код:

var hostUri = window.location.origin + '/GuestValidator.asmx/GetReservationInfo?resvNo=' + reservationno;
$.get(hostUri, {}, function (response) {
      var data = response.documentElement.innerHTML;
}

При выполнении в браузере Chrome ожидаемый результат возвращает строку значений с разделителями-запятыми в свойстве innerHTML объекта documentElement.

Однако, если тот же код выполняется с использованием IE 11 или Edge, в documentElement отсутствует свойство innerHTML.Это возвращается как неопределенное.

Но я могу изменить свой код на response.documentElement.childNodes [0] .data при выполнении в IE и получить тот же результат, который присутствовал в Chrome с использованием innerHTML.

У меня нетпротестировал код с другими браузерами, но я подозреваю, что они, вероятно, также будут иметь различия.

Так как этот код может быть пересмотрен, чтобы получить значение innerHTML в Chrome во всех браузерах без необходимости выполнения отдельного кода на основебраузер?

РЕДАКТИРОВАНИЕ ДЛЯ ЯРКОСТИ

Это выдержка из веб-метода.Он возвращает общий список типов строки.Не имеет значения, возвращаю ли я объект JSON.

var arry = new List<string>();
var blockedOrderDays = 3;
var blockedDay = String.Empty;
var noOrderDays = String.Empty;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var svclient = new ServiceClient();
var result = svclient.GetReservation(reservationNo);

var details = result.Reservation.ArrivalDate;
var arrivalDt = formatDate(details);
while(blockedOrderDays != 0)
{
    blockedDay = formatDate(details.AddDays(-blockedOrderDays));
    arry.Add(blockedDay);
    noOrderDays += blockedDay + ",";
    -- blockedOrderDays;
    ++x;
}
arry.Add(arrivalDt);
noOrderDays = noOrderDays + arrivalDt;
return noOrderDays;

1 Ответ

0 голосов
/ 08 апреля 2019

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

var hostUri = window.location.origin + '/GuestValidator.asmx/GetReservationInfo?resvNo=' + reservationno;
$.get(hostUri, {}, function (response) {
if ((navigator.userAgent.indexOf("MSIE") !== -1) || (!!document.documentMode === true))
    prohibitOrderDates = response.childNodes[0].textContent;
else
    prohibitOrderDates = response.children[0].innerHTML;
    var data = response.children[0].innerHTML;
}

В качестве альтернативы, хотя и не относится к ответу.Сокращенная версия вызова может быть:

var hostUri = window.location.origin + '/GuestValidator.asmx/GetReservationInfo';
$.get(hostUri, { resvNo=reservationno }, function (response) {
if ((navigator.userAgent.indexOf("MSIE") !== -1) || (!!document.documentMode === true))
    prohibitOrderDates = response.childNodes[0].textContent;
else
    prohibitOrderDates = response.children[0].innerHTML;
    var data = response.children[0].innerHTML;
}

Таким образом, response.children [0] .innerHTML является подходящим вызовом для сохранения непрерывности браузера для большинства браузеров, которые я тестировал, и IE всегда кажетсяисключение из правил.Даже Microsoft Edge следует стандарту.IE кажется странным шаром для того, чтобы всегда придерживаться стандарта.

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