Показать сообщение отдельно
  #8 (permalink)  
Старый 30.03.2011, 13:43
Новичок на форуме
Отправить личное сообщение для Oparin Посмотреть профиль Найти все сообщения от Oparin
 
Регистрация: 29.03.2011
Сообщений: 4

Функция открытия окна методом POST.
Жаль, конечно, что приходится извращаться.

Накатал вот такую функцию открытия окна методом POST, может кому-то будет полезна.
Правда пока не тестил в работе, может есть баги...

/*
Открытие нового окна и передача в него параметров методом POST
action - адрес 
args - передаваемые аргументы, вида "a=111&b=222&c=333&..."
target - '_top', '_blank', или название окна. Если не указано, то '_blank'
*/
function OpenNewWinPost(action,args,target){

	var new_el = function(el,name,value){
		m_form_i = document.createElement('input');
		m_form_i.setAttribute("type","hidden");
		m_form_i.setAttribute("name",name);
		m_form_i.setAttribute("value",value);
		el.appendChild(m_form_i);
	}

	if(!target) target = '_blank';

	var m_form = document.createElement('form');
	// Без добавления а адрес случайной последовательности в Chrome и Safari
	// переход по адресу происходит только один, первый раз
	var r = new Date().getTime()+Math.random();

	// Обработка адресов с # или ?
	if(/\?/i.test(action)){
		var tmp = new Array();
		tmp = action.split('?');
		if(/#/i.test(tmp[1])){
			var tmp2 = new Array();
			tmp2 = tmp[1].split('#');
			action=tmp[0]+'?'+tmp2[0]+'&'+r+'#'+tmp2[1];
		}else action=tmp[0]+'?'+tmp[1]+'&'+r;
	}else{
		if(/#/i.test(action)){
			var tmp2 = new Array();
			tmp2 = action.split('#');
			action=tmp2[0]+'?'+r+'#'+tmp2[1];
			
		}else action=action+'?'+r;
	}

	m_form.setAttribute("action",action);
	m_form.setAttribute("method","POST");
	m_form.setAttribute("target",target);

	// разбор аргументов
	var tmp = new Array();
	var tmp2 = new Array();
	if(args != '') {
		tmp = args.split('&');	// разделяем переменные
		for(var i=0; i < tmp.length; i++) {
			tmp2 = tmp[i].split('=');		// массив param будет содержать
			new_el(m_form,tmp2[0],tmp2[1]);
		}
	}

	// добавим на страницу
	var body = document.getElementsByTagName('body')[0];
	body.appendChild(m_form);
	// переход
	m_form.submit();
	// и в конце удалим
	body.removeChild(m_form);
}
Ответить с цитированием