Страницы: 1
Форма(id=mainform) загружается AJAX'ом, а далее перебираются все элементы формы и создается POST запрос, который и отправляется.
В FF3.0 все было нормально и все работало.
В FF 3.5 javascript не видит форму. alert(document.getElementById('mainform')); выводит null.
Сначало проблему решил следующим способом
httpRequest.open('POST',url,true); true заменил на false
тогда алерт стал видеть форму, но ответ от скрипта иногда не приходил
в чем здесь может быть загвоздка?
Отредактировано malmax (25-09-2009 15:58:13)
Отсутствует
Тема перенесена из форума «Firefox» в форум «Разработка».
Через сомнения приходим к истине. Цицерон
Отсутствует
а у меня alert(document.getElementById('mainform')); выводит "[object HTMLFormElement]"
Видимо надо пример Вашей формы, что бы понять в чём дело.
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Первоначальная информация:
<a href=#step1 id='step1' onClick="sendRequest('edittypeincome.php?id_catalog=7', 'mainbody', callback);"><B>Шаг 1. </B>Получение первоначальной информации</A> ...<td><SPAN id=mainbody> </SPAN></td>
AJAX:
var httpRequest = createHttpRequest(); var resultId = ''; var callback=''; function createHttpRequest() { var httpRequest; var browser = navigator.appName; var url; if (browser == "Microsoft Internet Explorer") { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } return httpRequest; } function sendRequest(file, _resultId, getRequestProc) { resultId = _resultId; url=file; document.getElementById(resultId).innerHTML = stat(httpRequest.readyState); httpRequest.open('get', url); httpRequest.onreadystatechange = getRequestProc; httpRequest.setRequestHeader("Referer", location.href); httpRequest.send(null); httpRequestTimeout = setTimeout("httpRequest_abort(resultId,url)", 10000); } * Кодирование данных (простого ассоциативного массива вида { name : value, ...} в URL-escaped строку (кодировка UTF-8) */ function urlEncodeData(formid) { var query = []; var data; data = document.getElementById(formid); if (data instanceof Object) { for (i=0; i<data.elements.length; i++) { if(data.elements[i].name!=null) query.push(encodeURIComponent(data.elements[i].name) + "=" + encodeURIComponent(data.elements[i].value)); } return query.join('&'); } else { return data; } } /* Выполнение POST-запроса url - адрес запроса data - параметры в виде простого ассоциативного массива { name : value, ...} */ function serverRequest(formid,_url,_resultId) { if(_url!=null) //если задается url - то перезадаем url url=_url; if(_resultId!=null) //вывод в другое место { resultId=_resultId; //куда происходит запись результатов id_to_write=0; //не надо перезаписывать инфу в опенере } if(!httpRequest) return false; httpRequest.open('POST',url,true); /* Не отправлялись пост запросы когда была Правда в ФФ3.5.3 */ if (httpRequest.setRequestHeader) httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); httpRequest.send(urlEncodeData(formid)); if(callback) httpRequest.onreadystatechange=callback; else httpRequest.onreadystatechange = getRequest; httpRequestTimeout = setTimeout("httpRequest_abort(resultId,url)", 10000); document.getElementById(resultId).innerHTML = stat(httpRequest.readyState); return true; }
После получение информации от скрипта:
<td> <span id="mainbody"> <h2>ШАГ 1. Получение информации</h2> <form id="dynamicform" onsubmit="serverRequest(this.id); return false;" name="form" method="post"> <table><tbody><tr> <td valign="top">С какого числа *:</td> <td valign="top"><input name="dates" value="2009-09-01" size="10" maxlength="10" type="text"></td> </tr> <tr> <td> </td> <td valign="top"><span style="color: blue;">Время в формате ГГГГ-ММ-ДД</span><br></td> </tr> <tr> <td valign="top">По какое число *:</td> <td valign="top"><input name="datee" value="2009-09-29" size="10" maxlength="10" type="text"></td> </tr> <tr> <td> </td> <td valign="top"><span style="color: blue;">Время в формате ГГГГ-ММ-ДД</span><br></td> </tr> <tr> <td valign="top">Оплата*:</td> <td valign="top"><input name="opl_1" value="26.5" size="10" maxlength="10" type="text"></td> </tr> <input name="id_catalog" value="7" type="hidden"> <tr> <td></td> <td> <input class="button" value="сохранить" type="submit"> </td> </tr> </tbody></table></form></span> </td>
При нажатии на сохранить Firebug показывал пустой POST запрос
Отсутствует
malmax, я слабо знаком с XMLHttpRequest(), я больше с php работал. но, насколько знаю, данные post запроса должны быть сформированы в виде
datapost = "name1=" + urlEncodeData(data1) + "&" + "name2=" + urlEncodeData(data2)
и обязательно указать в заголовке размер этих данных что-то типа
httpRequest.setRequestHeader("Content-Lenght", strlen(postdata));
зы. строку писал по памяти
ИМХО, данные то у тебя передаются, но "перехватчик" не видит размер данных и не определяет сколько перехватывать нужно
Отредактировано be@ver (29-09-2009 14:40:15)
Отсутствует
возвращаясь к первоначальному посту, добавил alert(document.getElementById(formid));
перед data = document.getElementById(formid);
выдает [object HTMLFormElement]
для полноценной проверки вашего примера не хватает кода функций getRequest и stat
а еще в примере комментарий для urlEncodeData с ошибкой объявлен.
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Страницы: 1