Использование document.write для фиксированного HTML - PullRequest
0 голосов
/ 02 июня 2009

Я создаю веб-форму, в которой есть комбинации, содержащие около 100 значений. Значения совпадают.

Форма может содержать несколько записей. Таким образом, если есть 100 записей, то есть 10000 строк, что кажется довольно неправильным с точки зрения «загрузки».

Дело в том, что я хочу, чтобы этот комбо-динамик сохранял идентификатор из базы данных.

Итак, я пришел к следующему:

  .....
 <script>
      stupidCombo = "<option>a"+
                    "<option>b"+
                    ...
                    "<option>99zzz"+
                    "</select>";
 </script>
 ..... form here
 .... for each item in huge list do paint <table><tr> etc. etc 

 <td>
 <select name="comb-<%=id%>">
      <option selected><%=obj.val%>
      <script>document.write(stupidCombo);</script>
 </td>
... close form, table, html etc. 

Я сделал это и "хорошо выгляжу". Страница сократилась с 50 тыс. Строк до 5 тыс., И выбор создается с помощью JavaScript на стороне клиента.

Мой вопрос .....

Это нормально?

Есть ли риск?

Я заимствую эту идею после понимания того, кто работает в большинстве фреймворков javascript, но большинство из них работают над элементом , а не над самим документом.

Я нацеливаюсь на IE6, и это быстрое решение, которое должно появиться завтра утром (так что я не хочу тратить на это слишком много времени), но я не хочу, чтобы 50 000 строк были написаны для каждого запрос, если я могу помочь.

Спасибо

Ответы [ 5 ]

3 голосов
/ 02 июня 2009

HTTP-сжатие (mod_gzip и т. Д.) Сжимает все это красиво.

Если вы настаиваете на document.write, вам придется использовать JavaScript и для записи <select> элемента, потому что в HTML вам не разрешено помещать <script> внутри <select>.

Другой подход - отправить одну копию элемента управления в браузер, а затем скопировать ее с помощью selectElement.cloneNode(true).

1 голос
/ 02 июня 2009

HTML, созданный document.write, работает так же, как и обычный, поэтому никаких технических проблем с вашим решением нет. (конечно, такое решение работает, только если включен JavaScript)

Кстати, для списков с большим количеством опций, вы можете посмотреть компонент «предложить ящик» , который может заменить нативный селектор.

1 голос
/ 02 июня 2009

ну, очевидно, он не будет работать, если JavaScript отключен.

0 голосов
/ 09 июня 2009

Обновление.

Я сделал так, как я просил, и все работало нормально. Проблем с js внутри не было, т.е.

Но ...

После визуализации таблицы следующая попытка пользователя (всегда пользователь делает что-то неожиданное) была

«Хорошо, отчет выглядит хорошо. Я собираюсь скопировать / вставить его в MS-Excel, спасибо.»

Что меня действительно не волнует. Это зависит от пользователя, но результат был: Таблица Excel умерла (или застыла, что почти то же самое) !!!! поскольку механизм javascript в Excel не так хорош, как в IE, для копирования этих комбинаций потребовалось целое вечное время, и фактически приложение Excel оказалось непригодным для использования.

Я не знал, что копирование / вставка была настолько хороша из IE в Excel, что он фактически скопировал весь сгенерированный HTML, и Excel тоже попытался запустить javascript с ужасными результатами.

Я попробую еще раз, оставив необработанный html, и посмотрю, работает ли он лучше.

:(

0 голосов
/ 02 июня 2009

Google делает это ("document.write") все время (Analytics / Adsense / ...), поэтому я не понимаю, почему с этим что-то не так.

Ваше решение выглядит немного странно, потому что тег <script> находится внутри тега <select>, поэтому вам лучше проверить его в нескольких браузерах. В конце концов, вы никогда не знаете, что собирается делать IE:)

...