ajax js сериализует не читая элементы формы

Иметь форму, которая не читается функцией serialize().



 <script type="text/javascript">
 function submitTrans1(){
  var formData = $('form1').serialize();
  var options = {
   method:'post',
   postBody:'formData',
   onCreate: function(){alert(formData)},
      onSuccess: function(transport){alert("onSuccess alert \n" + transport.responseText);},
   onComplete: function(){alert('complete');},
   onFailure: function(){alert('Something went wrong...')}
   }

  new Ajax.Request('/clients/addTrans/<?=$clientID123?>/',options);
 }
 </script>
  <?php
  $datestring = "%Y-%m-%d";
  $time = time();
  $clid1 = $this->uri->segment(3);
  ?>
  <form name="form1" id="form1">
   <div id="addTransDiv" style="display:none">

     <div class="">
      <label for="transDesc" id="transDesc" value="sadf" class="preField">Description</label>
      <textarea cols="40" rows="3" id="transDesc" value="" name="transDesc" class=""></textarea>
     </div>
     <div class="">
      <label for="date" class="preField">Date</label>
      <input type="date" id="transDate" name="date" value="<?=mdate($datestring, $time);?>" size="40" class=""/><br/>
     </div>
     <div class="">
      <label for="userfile" class="preField">File</label>
      <input type="file" name="transFile" id="userfile" size="20" /><br>
     </div>
     <input type="button" id="submitTrans" name="submitTrans" value="Submit" onclick="submitTrans1()">

   </div>
  </form>

Э-э, у меня есть предупреждение в параметре onSuccess Ajax.Request, которое в идеале предупредит переменную, назначенную сериализованной форме. Однако, когда он предупреждает, он ничего не предупреждает. У меня также есть URL-адрес обработки, распечатывающий данные $_POST на всякий случай, но он также возвращает пустой массив в responseText, поэтому действительно ничего не отправляется в форму.

Спасибо.

Редактировать1

кажется, проблема может быть связана с тем, что форма находится внутри div. Если я удаляю на странице все, кроме формы и js, все работает нормально. Но форма находится в div, который по умолчанию скрыт и использует другую функцию для отображения. Нужна ли какая-то магия для получения данных формы через сериализацию, если они находятся в div?


Редактировать 2

Пробовал добавлять кавычки, знаки фунта и все такое прочее. Я использую панель инструментов веб-разработчика, firebug и т. д. Он не выдает никаких ошибок js и ничего не боится.


person stormdrain    schedule 02.10.2009    source источник


Ответы (3)


Попробуйте удалить кавычки вокруг имени переменной formData в поле postBody.

Панель инструментов веб-разработчика в Firefox так же полезна для отладки javascript на стороне клиента.

Кстати, этот фрагмент содержит несколько неопределенных элементов, таких как JS-функция showTransAdd(), несколько переменных PHP, PHP-функция mdate() и включение библиотеки прототипов.

person Ewan Todd    schedule 02.10.2009
comment
Спасибо. Однако, если переменная отображается пустой в предупреждении, не означает ли это, что в конечном итоге ничего не передается в переменную formData? Я имею в виду, что если ничего не будет в оповещении (formData), ничего не будет в postBody с кавычками или без них, нет? Кроме того, определены другие функции и переменные, выходящие за рамки кода, с которым я борюсь. Спасибо еще раз. - person stormdrain; 02.10.2009
comment
Как и в случае с Адамом, моя игрушечная копия тоже сработала. И у него был div, но мне пришлось удалить style='display:none', чтобы увидеть кнопку. Возможно, здесь важна реализация функции showTransAdd(). Одна мысль: поможет ли установка директивы display:none в CSS для #addTransDiv? Это или поместите display:none в форму вместо div. - person Ewan Todd; 03.10.2009

Измените эту строку:

var formData = $('form1').serialize();

к этому:

var formData = $('#form1').serialize();

Мне пришлось изменить несколько других вещей, чтобы сделать рабочую копию, но я не уверен в том, какой код вы скрывали или чем может отличаться ваша среда. Если это не сработает, я могу отправить вам полный фрагмент кода, который я использовал.

person Adam    schedule 03.10.2009
comment
Спасибо. Однако добавление знака фунта приводит к возникновению ошибки js [('#form1') is null)]. На странице более 1000 строк кода, поэтому я решил, что лучше не вставлять все это целиком ;) Несомненно, проблема заключается в строке 521, но ее недостаточно, чтобы вызвать какие-либо ошибки в обычном смысле... Вот укрепление! - person stormdrain; 03.10.2009

Ошибочная таблица делает перерыв.

У меня была форма в таблице без tr или td (не уверен, что последняя часть имеет значение), и после удаления тегов таблицы все работает.

Соответствующий js теперь выглядит так:

var formData = $('form1').serialize();
var options = {
   method:'post',
   postBody:formData,
 [...]

Я хотел бы поблагодарить Академию и всех тех, кто помог мне.

person stormdrain    schedule 03.10.2009