Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№125-09-2009 15:57:27

malmax
Участник
 
Группа: Members
Зарегистрирован: 25-09-2009
Сообщений: 2
UA: Firefox 3.5

FF 3.5.3 и AJAX

Форма(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)

Отсутствует

 

№226-09-2009 18:16:23

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 14009
Веб-сайт

Re: FF 3.5.3 и AJAX

Тема перенесена из форума «Firefox» в форум «Разработка».


Через сомнения приходим к истине. Цицерон

Отсутствует

 

№328-09-2009 09:38:49

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
UA: Firefox 3.5
Веб-сайт

Re: FF 3.5.3 и AJAX

а у меня alert(document.getElementById('mainform')); выводит "[object HTMLFormElement]"
Видимо надо пример Вашей формы, что бы понять в чём дело.


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№429-09-2009 13:35:45

malmax
Участник
 
Группа: Members
Зарегистрирован: 25-09-2009
Сообщений: 2
UA: Firefox 3.0

Re: FF 3.5.3 и AJAX

Первоначальная информация:

Выделить код

Код:

<a href=#step1 id='step1' onClick="sendRequest('edittypeincome.php?id_catalog=7', 'mainbody', callback);"><B>Шаг 1. </B>Получение первоначальной информации</A>
...<td><SPAN id=mainbody>&nbsp;</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">С какого числа&nbsp;*:</td>
                      <td valign="top"><input name="dates" value="2009-09-01" size="10" maxlength="10" type="text"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;</td>
                        <td valign="top"><span style="color: blue;">Время в формате ГГГГ-ММ-ДД</span><br></td>
                    </tr>
                    <tr>
                      <td valign="top">По какое число&nbsp;*:</td>
                      <td valign="top"><input name="datee" value="2009-09-29" size="10" maxlength="10" type="text"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;</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 запрос

Отсутствует

 

№529-09-2009 14:38:51

be@ver
Участник
 
Группа: Members
Зарегистрирован: 21-09-2009
Сообщений: 15
UA: Firefox 3.5

Re: FF 3.5.3 и AJAX

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)

Отсутствует

 

№602-10-2009 14:34:08

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
UA: Firefox 3.5
Веб-сайт

Re: FF 3.5.3 и AJAX

возвращаясь к первоначальному посту, добавил 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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]