jQuery динамическое создание форм в IE8 не работает с большими объемами данных - PullRequest
1 голос
/ 13 февраля 2010

На работе у нас есть отчет, который создается с IP-адресами. В этом отчете есть ссылка, по которой вы можете открыть новое окно и вызвать скрипт, который отображает карту Google с точками, откуда происходит каждый IP-адрес. В зависимости от отчета, он может вернуть много IP-адресов (около 150 за раз). Поэтому, чтобы это сработало, нам нужно POST-данные к этому сценарию, поскольку при использовании GET максимальный размер URL-адреса превышается в разы.

Итак, когда я нажимаю эту ссылку, чтобы открыть карту, я вызываю написанную мной функцию Javascript, которая принимает IP-адреса, создает тег формы с целевым атрибутом, который указывает на новое окно, которое будет открывается, добавляет его к текущей странице, затем добавляет скрытые вводы 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 для кросс-браузерной совместимости, поскольку IE8, похоже, не нравится, когда вы вызываете blah.setAttribute ('name', 'value'); Превращает этот атрибут «name» в «submitName». Что вызывает проблемы при отправке формы.

Это прекрасно работает в FF и даже в IE8, когда нет большого количества скрытых вводов, которые необходимо создать. Однако, когда мы получаем около 150 скрытых элементов ввода, в IE8 ничего не происходит. Я не получаю никаких ошибок скрипта или чего-то еще, это как если бы щелчок по ссылке на карту был проигнорирован. Я предполагаю, что там есть какая-то поломка.

У кого-нибудь есть предложения, как сделать это лучше?

1 Ответ

1 голос
/ 06 марта 2010

Я выяснил проблему с этим.

Это не было проблемой с jQuery вообще ... Казалось, это ограничение IE8 для строковых литералов. На самом деле nameValuePairs была строкой запроса, которая выглядела так ...

'Key=Value&Something=Nothing'

Это было сгенерировано скриптом, который выводит некоторый HTML. Когда эта строка стала довольно большой, IE8 просто не мог вызвать мою функцию submitToWindow, описанную выше. В IE8 не было ошибок, он просто не вызывал эту функцию.

Способ, которым я обошел это, заключался в том, чтобы скрипт генерировал скрытые элементы формы, чтобы моему JavaScript-коду не приходилось анализировать эту длинную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...