在不同的浏览器平台上使用$ .get获取内部HTML数据一致响应的合适方法是什么?

时间:2019-04-05 15:45:21

标签: javascript jquery cross-browser

给出以下代码:

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值,而不必基于浏览器执行单独的代码?

为清楚起见而编辑

这是web方法的摘录。它返回字符串类型的通用列表。我是否返回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 :(得分:0)

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

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