Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Essinho

[Resolvido] Problema com form =\

Recommended Posts

iaew galera beleza!? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

eu tava dando umas olhadas em alguns codigos aew

pra enviar um form via pos

 

aew ficou mais ou menos assim

 

o js eh esse

 

var navegador = navigator.userAgent.toLowerCase(); //Cria e atribui à variável global 'navegador' (em caracteres minúsculos) o nome e a versão do navegador
var xmlhttp; //Cria uma variável global chamada 'xmlhttp'

//Função que inicia o objeto XMLHttpRequest
function objetoXML() {
	if (navegador.indexOf('msie') != -1) { //Internet Explorer
		var controle = (navegador.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'; //Operador ternário que adiciona o objeto padrão do seu navegador (caso for o IE) à variável 'controle'
		try {
			xmlhttp = new ActiveXObject(controle); //Inicia o objeto no IE
		} catch (e) { }
	} else { //Firefox, Safari, Mozilla
		xmlhttp = new XMLHttpRequest(); //Inicia o objeto no Firefox, Safari, Mozilla
	}
}

//Função que envia o formulário
function enviarForm(url, campos, destino) {
	var elemento = document.getElementById(destino); //Atribui à variável 'elemento' o elemento que irá receber a página postada
	objetoXML(); //Executa a função objetoXML()
	if (!xmlhttp) { //Se o objeto de 'xmlhttp' não estiver true
		elemento.innerHTML = 'Impossível iniciar o objeto XMLHttpRequest.'; //Insere no 'elemento' o texto atribuído
		return;
	} else { //Senão
		elemento.innerHTML = 'Carregando...'; //Insere no 'elemento' o texto atribuído
	}
	xmlhttp.onreadystatechange = function () {
		if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0) { //Se a requisição estiver completada
			if (xmlhttp.status == 200) { //Se o status da requisição estiver OK
				elemento.innerHTML = xmlhttp.responseText; //Insere no 'elemento' a página postada
			} else { //Senão
				elemento.innerHMTL = 'Página não encontrada!'; //Insere no 'elemento' o texto atribuído
			}
		}
	}
	xmlhttp.open('POST', url+'?'+campos, true); //Abre a página que receberá os campos do formulário
	xmlhttp.send(campos); //Envia o formulário com dados da variável 'campos' (passado por parâmetro)
}

 

essa a pag index

<form action="includes/envia.comentario.php" method="post" onSubmit="setarCampos(); enviarForm('includes/envia.comentario.php', campos, 'divResultado'); return false;" >
			<input type="hidden" name="id_materia" id="id_materia" value="<?php echo $lista[0]["id_materia"]; ?>" />
			<input type="hidden" name="id_foto" id="id_foto" value="<?php echo $lista[0]["id_foto"] != "" ? $lista[0]["id_foto"] : '0'; ?>" />
			  <table width="100%" border="0" cellspacing="1" cellpadding="1">
				<tr>
				  <td colspan="3">
					  <table background="imgs/bgBarraComentario.jpg" width="100%" cellpadding="0" cellspacing="0" border="0" height="15px" >
						<tr>
							  <td><b>  .: Comentários</b> <img src="imgs/setaBarraComentario.jpg" style="margin-left:5px; margin-top: -1px; margin-bottom: -3px; " /> 
							</td>
						</tr>
					  </table>
				  </td>
				</tr>
				
				<tr>
				  <td width="9%" align="right"><b>Nome:</b></td>
				  <td colspan="2"><input name="nome" id="nome" type="text" class="inputNomeEmail" /></td>
				</tr>
				
				<tr>
				  <td align="right"><b>E-mail:</b></td>
				  <td colspan="2"><input name="email" id="email" type="text" class="inputNomeEmail" /></td>
				</tr>
			  </table>
			  
			  <table cellpadding="0" cellspacing="0" border="0" width="100%" >
				<tr>
				  <td colspan="2"><b>Comentário:</b></td>
				  <td width="28%" rowspan="2">
					  <table width="100%" border="0" cellspacing="1" cellpadding="1">
						<tr>
						  <td width="4%"><img src="imgs/emoticons/Angry.gif" /></td>
						  <td width="12%"><img src="imgs/emoticons/(8).gif" /></td>
						  <td width="11%" rowspan="2"><img src="imgs/emoticons/driv.gif" /></td>
						  <td width="73%" rowspan="2"><img src="imgs/emoticons/toh.gif" /></td>
						</tr>
						<tr>
						  <td><img src="imgs/emoticons/angel.gif" /></td>
						  <td><img src="imgs/emoticons/shiu.gif" /></td>
						</tr>
						<tr>
						  <td colspan="2"><img src="imgs/emoticons/sick_car.gif" /></td>
						  <td><img src="imgs/emoticons/police.gif" /></td>
						  <td><img src="imgs/emoticons/lowrider.gif" /></td>
						</tr>
					  </table>
				  </td>
				</tr>
				
				<tr>
				  <td colspan="2"><textarea name="comentario" id="comentario" class="TAComentario"></textarea>
					  <br />
					  <input name="image" type="image" class="inputOkLogin" src="imgs/butOk.gif" />
				  </td>
				</tr>
			  </table>
		</form>

<!-- Cria a variável com os campos para envio via parâmetro //-->
<script>
	function setarCampos() {
		campos = "id_materia="+encodeURI(document.getElementById('id_materia').value).toUpperCase()+"&id_foto="+encodeURI(document.getElementById('id_foto').value).toUpperCase()+"&nome="+encodeURI(document.getElementById('nome').value).toUpperCase()+"&email="+encodeURI(document.getElementById('email').value).toUpperCase()+"&comentario="+encodeURI(document.getElementById('comentario').value);
	}
	
function pegaVariaveis() {
var variaveis = new Array('id_materia','id_foto','nome','email','comentario');
var dados = new String;
var comprimento = variaveis.length;
for(i = 0; i < comprimento; i) {
campo = variaveisi;
dados = campo "=" encodeURI(eval('document.form.' campo '.value'));
if(i < (comprimento - 1)) {
dados = "&";
}
}
}
</script>

i essa a pg de resposta

extract($_POST); //Extraí os dados do formulário
  $id_materia = ($id_materia != "") ? $id_materia : "desconhecido";
   $id_foto = ($id_foto != "") ? $id_foto : "desconhecido";
 $nome = ($nome != "") ? $nome : "desconhecido"; //Verifica se algum nome foi digitado
 $email = ($email != "") ? $email : "desconhecido"; //Verifica se algum email foi digitado
  $comentario = ($comentario != "") ? $comentario : "desconhecido";

 echo $id_materia.', '.$id_foto.', '.$nome.', '.$email.', '.$comentario; //Retorna com a resposta

bem a dogeito q estar o q acontece eh ele chamar a pag envia.comentario em uma nova e nao na mesmma,

soh q se eu tiro a funçao pegaVariaveis() da pagina do form eh atualizado apenas a div q eu peço mais sem os

dados nela

:blink:

 

alguem sabe dizer mais ou menos o q eu poderia tah fazendo pra melhorar issu?

 

grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

aewW galera resolvi assim...

 

script.js

// JavaScript Document
//INICIALIZA AS VARIAVEIS PARA CONTROLE DA FILA
var ifila = 0
var fila = new Array();
//fila[X][0] - Div onde sera carregada a pagina
//fila[X][1] - Pagina que sera chamada
//fila[X][2] - Metodo de envio
//fila[X][3] - Campos do form concatenados no padrao para serem enviados. Null caso seja um link



//INICIALIZA O OBJETO QUE IRA FAZER AS SOLICITACOES
try{
	xmlhttp = new XMLHttpRequest();// Mozilla, Safari, Firefox, etc...
	try {
		if (xmlhttp.overrideMimeType) {
			//Se possível, ignora cabecalho usado pelo servidor e forca o padrao "text/xml". Alguns navegadores exigem esse padrao e pode dar erro se o servidor nao utilizar ele
			xmlhttp.overrideMimeType('text/xml');
		}
	} catch (e1) { }
}catch(e2){
	try{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");// Internet Explorer
	}catch(e3){
		try{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");// Internet Explorer
		}catch(e4){
			//tratamento para alguma outra forma de implementar XMLHTTP
			xmlhttp = false;
		}
	}
}
if (!xmlhttp){
	//Nao conseguiu instanciar o objeto xmlhttp para fazer as solicitacoes
	alert("AJAX error. Your browser must support XMLHttpRequest object or enable use of scripting.");
}


//GUARDA NA FILA O ID DO OBJETO E O FORM QUE SERAO CARREGADOS PELO LINK CLICADO
function ajaxForm(id_target,id_form){
	//Pega a pagina que sera chamada pelo form
	var url = document.getElementById(id_form).action;
	//Busca metodo de envio definido no form
	var metodoEnvio = document.getElementById(id_form).method.toUpperCase();
	//Busca os elementos do form que serao enviados para a pagina solicitada
	var elementos_form = BuscaElementosForm(id_form);

	//Exibe mensagem de que esta carregando a pagina no objeto de ID informado
	ajaxMensagemCarregando(id_target);

	//Adiciona a solicitacao na fila
	fila[fila.length]=[id_target,url,metodoEnvio,elementos_form];

	//Se nao tem conexoes na fila, inicia a execucao
	if(fila.length==1){
		ajaxRun();
	}
	return;
}



//EXECUTA A PROXIMA SOLICITACAO DA FILA
function ajaxRun(){
	var url = fila[ifila][1];

	//Define o metodo de envio (GET ou POST)
	var metodoEnvio;
	if (fila[ifila][3]==null){
		//Se for Link, utiliza GET
		metodoEnvio = "GET";
	}else{
		//Se for Form, define o metodo de envio e prepara a url
		metodoEnvio = fila[ifila][2];
		if (metodoEnvio=="" || metodoEnvio==null){
			//Se nao tiver definido nada, usa POST
			metodoEnvio = "POST";
		}
		if (metodoEnvio=="GET"){
			//Metodo GET passa as informacoes na linha da url
			url = url + "?" + fila[ifila][3];
		}
	}

	//Abre a conexao
	xmlhttp.open(metodoEnvio,url,true);

	//Seta as funcoes que irao tratar a mudanca de estado do objeto XMLHTTP
	xmlhttp.onreadystatechange=ajaxXMLHTTP_StateChange;

	//Executa a solicitacao
	if (metodoEnvio=="POST"){
		//Metodo POST precisa definir este RequestHeader
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		//Metodo POST passa as variaveis pelo metodo Send
		xmlhttp.send(fila[ifila][3]);
	}else{
		xmlhttp.send(null);
	}
	return;
}



//FUNCAO EXECUTADA QUANDO ALTERAR O STATUS DA SOLICITACAO (readyState)
function ajaxXMLHTTP_StateChange() {
	//0-Nao inicializado, 1-Carregando, 2-Carregado, 3-Interativo, 4-Completo
	if (xmlhttp.readyState==1){
		ajaxXMLHTTP_StateChange_Carregando(fila[ifila][0]);//Quando iniciar a solicitacao
	}else{
		if (xmlhttp.readyState==4){
			ajaxXMLHTTP_StateChange_Completo(xmlhttp, fila[ifila][0]);//Quando estiver completa a solicitacao
		}
	}
}



//FUNCAO EXECUTADA QUANDO INICIAR A SOLICITACAO (readyState=1)
function ajaxXMLHTTP_StateChange_Carregando(id){
	//Exibe mensagem de que está carregando a página no objeto de ID que solicitacao esta sendo feita
	ajaxMensagemCarregando(id);
	return;
}



//FUNCAO EXECUTADA QUANDO A SOLICITACAO ESTIVER COMPLETA (readyState=4)
function ajaxXMLHTTP_StateChange_Completo(xmlhttp, id){
	var retorno;

	//Verifica o status da pagina de retorno
	if (xmlhttp.status == 200 || xmlhttp.status==0) {
		//Caso o status seja 200(Sucesso) ou nao utilize servidor(chamada local [C:\...]), trata o valor retornado
		retorno=unescape(xmlhttp.responseText.replace(/\+/g," "));
	}else{
		//Caso o status ainda nao foi tratado, chama a funcao de tratamento de pagina de erro
		retorno=ajaxPaginaErro(xmlhttp);
	}
	//Exibe o valor retornado no objeto de ID informado
	document.getElementById(id).innerHTML=retorno;
	// executa scripts
	ExtraiScript(retorno); 

	//passa para a proxima posicao da fila
	ifila++;
	if(ifila<fila.length){
		//Caso tenha mais solicitacoes na fila, executa a proxima
		setTimeout("ajaxRun()",20);
	}else{
		//Caso nao tenha mais solicitacoes na fila, reinicia a fila
		fila = null;
		fila = new Array();
		ifila = 0;
	}
	return;
}



//FUNCAO PARA RETORNAR A MENSAGEM DE ERRO QUANDO O SERVIDOR RETORNAR UMA PAGINA DE ERRO
function ajaxPaginaErro(xmlhttp){
	var retorno;
	switch (xmlhttp.status) {
		case 404:
			return "Página não encontrada!!!";
			break;
		case 500:
			return "Erro interno do servidor!!!";
			break;
		default:
			return "Erro desconhecido!!!<br>" + xmlhttp.status + " - " + xmlhttp.statusText.replace(/\+/g," ");
	}
}



//FUNCAO PARA RETORNAR A MENSAGEM DE QUE ESTA CARREGANDO A PAGINA
function ajaxMensagemCarregando(id){
	document.getElementById(id).innerHTML = "Aguarde...";
}



// url_encode version 1.0 
function url_encode(str) { 
	var hex_chars = "0123456789ABCDEF"; 
	var noEncode = /^([a-zA-Z0-9\_\-\.])$/; 
	var n, strCode, hex1, hex2, strEncode = ""; 

	for(n = 0; n < str.length; n++) { 
		if (noEncode.test(str.charAt(n))) { 
			strEncode += str.charAt(n); 
		} else { 
			strCode = str.charCodeAt(n); 
			hex1 = hex_chars.charAt(Math.floor(strCode / 16)); 
			hex2 = hex_chars.charAt(strCode % 16); 
			strEncode += "%" + (hex1 + hex2); 
		} 
	} 
	return strEncode; 
} 



//FUNCAO PARA PEGAR OS CODIGOS SCRIPT
function ExtraiScript(texto){
	var ini, pos_src, fim, codigo, texto_pesquisa;
	var objScript = null;
	//Joga na variavel de pesquisa o texto todo em minusculo para na hora da pesquisa nao ter problema com case-sensitive
	texto_pesquisa = texto.toLowerCase()
	// Busca a primeira tag <script
	ini = texto_pesquisa.indexOf('<script', 0)
	// Executa o loop enquanto achar um <script
	while (ini!=-1){
		//Inicia o objeto script
		var objScript = document.createElement("script");

		//Busca se tem algum src a partir do inicio do script
		pos_src = texto_pesquisa.indexOf(' src', ini)
		// Define o inicio para depois do fechamento dessa tag
		ini = texto_pesquisa.indexOf('>', ini) + 1;

		//Verifica se este e um bloco de script ou include para um arquivo de scripts
		if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
			//Marca como sendo o inicio do nome do arquivo para depois do src
			ini = pos_src + 4;
			//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
			fim = texto_pesquisa.indexOf('.', ini)+4;
			//Pega o nome do arquivo
			codigo = texto.substring(ini,fim);
			//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
			codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
			// Adiciona o arquivo de script ao objeto que sera adicionado ao documento
			objScript.src = codigo;
		}else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
			// Procura o final do script
			fim = texto_pesquisa.indexOf('</script>', ini);
			// Extrai apenas o script
			codigo = texto.substring(ini,fim);
			// Adiciona o bloco de script ao objeto que sera adicionado ao documento
			objScript.text = codigo;
		}

		//Adiciona o script ao documento
		document.body.appendChild(objScript);
		// Procura a proxima tag de <script
		ini = texto.indexOf('<script', fim);

		//Limpa o objeto de script
		objScript = null;
	}
}



//FUNCAO PARA PEGAR OS ELEMENTOS DO FORM
function BuscaElementosForm(idForm) {
	var elementosFormulario = document.getElementById(idForm).elements;
	var qtdElementos = elementosFormulario.length;
	var queryString = "";
	var elemento;

	//Cria uma funcao interna para concatenar os elementos do form
	this.ConcatenaElemento = function(nome,valor) {
								if (queryString.length>0) {
									queryString += "&";
								}
								queryString += url_encode(nome) + "=" + url_encode(valor);
							 };
	//Loop para percorrer todos os elementos
	for (var i=0; i<qtdElementos; i++) {
		//Pega o elemento
		elemento = elementosFormulario[i];
		if (!elemento.disabled) {
			//Trabalha com o elemento caso ele nao esteja desabilitado
			switch(elemento.type) {
				//Realiza a acao dependendo do tipo de elemento
				case 'text': case 'password': case 'hidden': case 'textarea': 
					this.ConcatenaElemento(elemento.name,elemento.value);
					break;
				case 'select-one':
					if (elemento.selectedIndex>=0) {
						this.ConcatenaElemento(elemento.name,elemento.options[elemento.selectedIndex].value);
					}
					break;
				case 'select-multiple':
					for (var j=0; j<elemento.options.length; j++) {
						if (elemento.options[j].selected) {
							this.ConcatenaElemento(elemento.name,elemento.options[j].value);
						}
					}
					break;
				case 'checkbox': case 'radio':
					if (elemento.checked) {
						this.ConcatenaElemento(elemento.name,elemento.value);
					}
					break;
			}
		}
	}
	return queryString;
}

i no form eh soh declarar no onsubmit =" ajaxForm('caminho_DIV', 'id_do_form'); return false";

 

 

esse script pode valer pra alguem q esteja precisando

^_^

 

vlwW http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, desculpem postar depois de tanto tempo mas é que estava com inconsistência no dados do fórum, eu estava tentando logar e não conseguia, só depois de muito tempo que pensei em entrar em contato pra resolver isso. http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

Bom, não consegui fazer seu código executar, sério mesmo!

 

Não foi!

 

Eu também tenho problemas em fazer um formulario em ajax executar no método POST, geralmente XMLHTTPRequest executa em GET e por isso não encontrei muito na web que pudesse me ajudar (Já corrigindo o problema em executar XMLHTTPRequest no Internet Explorer).

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.