Internet Explorer不兼容v9& v8 [object Object]〜附加

时间:2016-08-25 10:03:30

标签: javascript jquery twitter-bootstrap-3 internet-explorer-8 internet-explorer-9

我正在开发一个Dashboard项目,其中一个组件在仪表板的“缩小”窗口中显示摘要表,查询参数是用户输入以生成特定报告。

代码在Chrome,Firefox,Internet Explorer 11和10,Microsoft Edge中完美呈现,这里是正确呈现内容的示例。

Correctly Rendered

但是,我的一些客户仍在使用Internet Explorer 9和8,我必须使用兼容的代码来支持它们,并且这些版本中我遇到了问题,如下例所示。 < / p>

Incorrectly Rendered

因此,正如您所看到的,对于每个用户输入对象,由于某种原因[对象对象]显示在摘要表的上方。

用户输入变量存储为隐藏标记,例如

Hidden Input Variables

流程如下

1)我通过将存储的输入变量传递给服务器来填充表,并返回带有结果的JSON对象

 $.getJSON('/analyticsdashboard/SysoutSearch/GetSysout?' + $('#hdnParameters').val().slice($('#hdnParameters').val().indexOf('?') + 1)).done(function (result) {
            var tbl = $("#tbl");
            var tbody = $('#tbl>tbody');

2)然后我将变量“剥离”到特定对象

var jobName = getURLParameterForHtml('jobName', $('#hdnParameters').val());
            var startDate = getURLParameterForHtml('startDate', $('#hdnParameters').val());
            var startTime = getURLParameterForHtml('startTime', $('#hdnParameters').val());
            var endDate = getURLParameterForHtml('endDate', $('#hdnParameters').val());
            var endTime = getURLParameterForHtml('endTime', $('#hdnParameters').val());
            var lastxDays = getURLParameterForHtml('lastxDays', $('#hdnParameters').val());
            var tableName = getURLParameterForHtml('tableName', $('#hdnParameters').val());
            var groupName = getURLParameterForHtml('groupName', $('#hdnParameters').val());
            var applicationName = getURLParameterForHtml('applicationName', $('#hdnParameters').val());
            var memberName = getURLParameterForHtml('memberName', $('#hdnParameters').val());
            var owner = getURLParameterForHtml('owner', $('#hdnParameters').val());
            var nodeId = getURLParameterForHtml('nodeId', $('#hdnParameters').val());
            var endStatus = getURLParameterForHtml('endStatus', $('#hdnParameters').val());
            var serverName = getURLParameterForHtml('serverName', $('#hdnParameters').val());
            var orderId = getURLParameterForHtml('orderId', $('#hdnParameters').val());

下面的getUrlParameter函数

var getUrlParameter = function (sParam, url) {
//debugger;
//window.location.search
var sPageURL = decodeURIComponent(url.substring(1)),
    sURLVariables = sPageURL.split('&'),
    sParameterName,
    i;

for (i = 0; i < sURLVariables.length; i++) {
    sParameterName = sURLVariables[i].split('=');

    if (sParameterName[0] === sParam) {
        return sParameterName[1] === undefined ? true : sParameterName[1];
    }
}

};

3)然后,我测试包含数据的对象,即非空的,并将它们作为一行附加到摘要表主体中,下面的示例

 if (jobName[1]) {
                        var newRow = "<tr><td></td><td>" + "Job Name" + "</td>" + "<td>" + jobName[1] + "<td></td></tr>" + tbody.append(newRow);
                    }

我已经尝试过在这里研究这个问题,例如Internet Explorer Incompatibility - page just shows "[object Object]" WTH?

但一直无法找到解决方案或完全理解问题。

我想知道

1)为什么在IE9和IE8中出现此问题而不是Chrome,Firefox,IE 10和IE11,Microsoft Edge?

2)我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

这个问题是由于我错过了HTML编码以在摘要表中附加新行。

之前我添加了每一个新行,例如

if (jobName[1]) {
                  var newRow = "<tr><td></td><td>" + "Job Name" + "</td><td>" + jobName[1] + "</td></tr>" + tbody.append(newRow);
                }  

正是这种错过编码导致了IE8和IE9中的问题。

我通过将新行和tbody.append(newRow)分成两个单独的语句来更改代码,下面是一个示例

if (jobName[1]) {
                var newRow = "<tr>" + "<td></td>" + "<td>" + "Job Name" + "</td><td>" + jobName[1] + "</td>" + "</tr>";
                tbody.append(newRow);
            }

和我的&#34;缩小&#34;窗口现在在IE8中正确呈现&gt; IE11,Microsoft Edge,Chrome和Firefox。

Okay in IE8 and IE9