首页 > 解决方案 > 在不同的浏览器平台上使用 $.get 为 innerHTML 数据获取一致响应的适当方法是什么?

问题描述

给定以下代码:

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

如果在 Chrome 浏览器中执行,预期结果会在 documentElement 对象的 innerHTML 属性中返回一个以逗号分隔的值字符串。

但是,如果使用 IE 11 或 Edge 执行相同的代码,则 documentElement 上没有 innerHTML 属性。它以未定义的形式返回。

但是当在 IE 中执行时,我可以将我的代码修改为 response.documentElement.childNodes[0].data,并使用 innerHTML 获得与 Chrome 中相同的结果。

我没有用其他浏览器测试过代码,但我怀疑它们也可能会有差异。

那么如何修改这段代码以在所有浏览器中获取 Chrome 中的 innerHTML 值,而不必基于浏览器执行单独的代码呢?

为清晰而编辑

这是网络方法的摘录。它返回一个字符串类型的通用列表。我是否返回 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;

标签: javascriptjquerycross-browser

解决方案


在花费一些额外的时间和精力使此代码在浏览器平台上以合理的连续性水平工作之后。下面的修改似乎已经解决了这个问题。

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 似乎是一个永远保持标准的奇怪球。


推荐阅读