IE8中的jQuery动态表单创建不能处理大量数据

时间:2010-02-13 00:51:31

标签: javascript jquery post internet-explorer-8

在工作中,我们有一个用IP生成的报告。您可以在该报告中单击一个链接,该链接将打开一个新窗口并调用脚本,该脚本会显示一个谷歌地图,其中包含指向每个IP来源的引导点。根据报告,它可以返回大量的IP(有时大约150个)。因此,为了解决这个问题,我们不得不将数据POST到该脚本,因为使用GET,有时会超出URL的最大大小。

所以我正在做的是当它点击它打开地图的链接时,我调用我写的带有IP的Javascript函数,创建一个带有target属性的表单标记,该属性指向将要出现的新窗口打开,将其附加到当前页面,然后将IP的隐藏输入附加到该表单。然后我打开具有指定名称的新窗口并提交表单。代码如下所示:

function submitToWindow(url, nameValuePairs) {
    var form = document.createElement('form');
    form.setAttribute('action', url);
    form.setAttribute('target', 'newWindow');
    form.setAttribute('method', 'POST');
    for (i=0; i < nameValuePairs.length; i++) {
        var nameValue = nameValuePairs[i].split('=');
        var input = $('<input name="' + nameValue[0] + '" type="hidden" value="' + nameValue[1] + '"/>');
        form.appendChild(input[0]);
    }
    document.body.appendChild(form);
    window.open('http://fakeurl.com', 'newWindow');
    form.submit();
}

我正在使用jQuery创建隐藏的输入元素以实现跨浏览器兼容性,因为当你调用blah.setAttribute('name','value')时IE8似乎不喜欢它;它将“name”属性转换为“submitName”。在提交表单时会导致问题。

当没有大量隐藏输入必须创建时,这在FF甚至IE8中都很有用。但是,当我们获得大约150个隐藏的输入项时,IE8中似乎没有任何事情发生。我没有得到任何脚本错误或任何东西,就像忽略了地图链接上的点击一样。我猜这里有一些故障。

有没有人对如何做得更好有任何建议?

1 个答案:

答案 0 :(得分:1)

我想出了这个问题。

这根本不是jQuery的问题..它似乎是对字符串文字的IE8限制。 nameValuePairs实际上是一个看起来像这样的查询字符串......

'Key=Value&Something=Nothing'

这是由输出一些HTML的脚本生成的。当该字符串变得相当大时,IE8只是不会调用我上面的submitToWindow函数。 IE8没有错误,它只是没有调用该函数。

我解决这个问题的方法是让脚本生成隐藏的表单元素,以便我的javascript代码不必解析那个长字符串。