在工作中,我们有一个用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中似乎没有任何事情发生。我没有得到任何脚本错误或任何东西,就像忽略了地图链接上的点击一样。我猜这里有一些故障。
有没有人对如何做得更好有任何建议?
答案 0 :(得分:1)
我想出了这个问题。
这根本不是jQuery的问题..它似乎是对字符串文字的IE8限制。 nameValuePairs实际上是一个看起来像这样的查询字符串......
'Key=Value&Something=Nothing'
这是由输出一些HTML的脚本生成的。当该字符串变得相当大时,IE8只是不会调用我上面的submitToWindow函数。 IE8没有错误,它只是没有调用该函数。
我解决这个问题的方法是让脚本生成隐藏的表单元素,以便我的javascript代码不必解析那个长字符串。