Ir para conteúdo

POWERED BY:

Arquivado

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

desisto

[Resolvido] ajax post

Recommended Posts

opa

peguei esse script na net e nao to conseguindo adaptar pro metodo POST... o original era com GET

alguem tem uma luz?

 

function datosServidor() {
};
datosServidor.prototype.iniciar = function() {
	try {
		this._xh = new XMLHttpRequest();
	} catch (e) {
		var _ieModelos = new Array(
		'MSXML2.XMLHTTP.5.0',
		'MSXML2.XMLHTTP.4.0',
		'MSXML2.XMLHTTP.3.0',
		'MSXML2.XMLHTTP',
		'Microsoft.XMLHTTP'
		);
		var success = false;
		for (var i=0;i < _ieModelos.length && !success; i++) {
			try {
				this._xh = new ActiveXObject(_ieModelos[i]);
				success = true;
			} catch (e) {
			}
		}
		if ( !success ) {
			return false;
		}
		return true;
	}
}

datosServidor.prototype.ocupado = function() {
	estadoActual = this._xh.readyState;
	return (estadoActual && (estadoActual < 4));
}

datosServidor.prototype.procesa = function() {
	if (this._xh.readyState == 4 && this._xh.status == 200) {
		this.procesado = true;
	}
}

datosServidor.prototype.enviar = function(urlget,datos) {
	if (!this._xh) {
		this.iniciar();
		alert("a");
	}
	if (!this.ocupado()) {
		alert("b");
		  this._xh.open('POST',urlget,true);
		  this._xh.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		  this._xh.setRequestHeader("Content-length", datos.length);
		  this._xh.setRequestHeader("Connection", "close");
		  this._xh.send(datos);
			if (this._xh.readyState == 4 && this._xh.status == 200) {
				return this._xh.responseText;
			}
	}
	return false;
}


function monta_voto(votos) {
	remotos = new datosServidor;
	nt = remotos.enviar('teste.asp','5245454621');
	document.getElementById('myspan').innerHTML = nt;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

this._xh.open('POST',urlget,true);
Já está em POST.

O envio para o programa server-side, é feito via GET mesmo. Isso não tem como mudar. (até onde eu sei)

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí companheiro! Não desista!!!

 

Use o código abaixo e adapte-o à sua necessidade.

Até mais.

 

var xmlHttp;
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try {
			// Firefox, Opera 8.0+, Safari
			xmlHttp=new XMLHttpRequest();
		} catch (e) {
						// Internet Explorer
						try {
								xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
							} catch (e) {
											xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
										}
					}
return xmlHttp;
}


	//Consulta Ajax
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null){alert ("O seu navegador não suporta AJAX!");return;}
	url="../consulta.php";// Página (URL) que irá receber os dados e retornar a resposta
	StrData = "cep="+valor;//Variáveis e seus respectivos valores quase igual ao método GET a não pelo fato de NÂO colocarmos o ?
	// sinal de interrogação antes da primeira variável
	xmlHttp.open("POST",url,true); 
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");//UTF-8 é padrão
	// se tiver problemas com acentuação dos caracteres em português adicione:  $_POST = array_map(utf8_decode, $_POST);  na página php	  
	xmlHttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
	xmlHttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); 
	xmlHttp.setRequestHeader("Pragma", "no-cache"); 
	xmlHttp.setRequestHeader('Content-length', StrData.length );
	xmlHttp.send(StrData);
	xmlHttp.onreadystatechange=function()
										{
											if (xmlHttp.readyState==4)
											{
												if (xmlHttp.status==200)
												{
													//Função externa não descrita aqui, que é responsável por trabalhar a resposta
													// que tanto poderá ser XML, texto puro ou HTML...
													AjaxCheckResult(xmlHttp.responseText);
													
												}else{alert('Houve um problema com sua requisição.');}
											}
										}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela forca Buongiorno, e pelo codigo :)

eu sou um zero a esquerda nessa parte de ajax

 

ate testei o seu codigo e acho que funcionou, mas eu preciso retornar o valor numa variavel

tipo assim

nesse codigo que postei, eu chamo a funcao assim:

nt = remotos.Carrega_dados('teste333.asp',poststr);

e o NT me retorna o valor da consulta

 

isso é uma funcao onde eu abro um modal e quando submeto o form com nt = remotos.Carrega_dados('...',...);

eu pego o valor do nt e comparo, se retornar 0 é ok, se retornar 1, virá com o codigo do erro, tipo um "email nao encontrado"

 

por isso eu preciso +- de algo que fosse assim

 

 

tenho modal pros casos:

'esqueci a senha', 'enviar por email' entre outros

por isso eu preciso do resultado separado

 

 

deu pra entender +-?

valeu pela ajuda

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite companheiro!

 

Observe o seguinte:

 

Em Ajax, como os dados são enviados e recebidos de forma assíncrona

você precisa especificar uma função para tratar a resposta do servidor.

No exemplo que postei isso é feito em:

 

" xmlHttp.onreadystatechange = function(){ "

 

Aí, eu defini uma função "na marra", mas poderia ter feito assim:

 

" xmlHttp.onreadystatechange = resposta; "

 

Obs.: Note que você deve colocar apenas o nome da função, sem os parênteses.

 

Neste caso a função resposta seria parecida com:

 

function resposta()

{

if (xmlHttp.readyState==4)//Resposta do servidor OK

{

if (xmlHttp.status==200) //Processo completado

{

 

//Aqui a função trabalhará a resposta do servidor

// A resposta poderá conter dados em XML

// ou por ex. uma frase contendo multiplos valores separados por vírgula

//e depois usamos a função split(",") para recuperálos etc.

// ou o a imaginação mandar

 

}else{alert('Houve um problema com sua requisição.');}

}

}

 

/* Descrições

 

xmlHttp.readyState:

 

0 - The request is not initialized (Não iniciado)

1 - The request has been set up (Carregando)

2 - The request has been sent (Carregado)

3 - The request is in process (Interativo)

4 - The request is complete (Completado)

 

xmlHttp.status:

 

200 - Resposta do servidor OK

404 - Página não encontrada (Not Found)

*/

 

Diante disto você não poderá atribuir dados diretamente à

sua variável nt como fez em:

nt = remotos.Carrega_dados('teste333.asp',poststr);

 

supondo que Carrega_dados() é a função que envia os dados

via Ajax, não é entretanto ela mesma que obterá a resposta do servidor.

 

 

 

Até breve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela aula Buongiorno

vou dar uma estudada nisso pra ver se aprendo um pouco

 

depois posto o resultado

[]s

e obrigado de novo :)

 

-----------------------------------------------

editando pra ver se aprendi alguma coisa:)

 

if (xmlHttp.readyState==4){
	if (xmlHttp.status==200){
		AjaxCheckResult=xmlHttp.responseText;
		alert(AjaxCheckResult);
	}
	else{alert('Houve um problema com sua requisição.');}
}
esse alerta ja é a resposta da consulta, depois de 'carregado' e 'completado' ele me retorna o valor que eu dou um alerta

ate ai esta certo ne, eu consigo um alert com o resultado e consigo exibie numa div sem problema

 

 

bato a cabeca aqui

function email(){
	 asd = Carrega_dados('teste333.asp',poststr);
}
<input type="button" name="ok" value="entrar" onClick="email()">
essa seria uma funcao pra chamar a consulta de 'email'

 

eu tenho outra consulta, chamada 'enviar por email'

function enviar(){
	 asd = Carrega_dados('teste333.asp',poststr);
}
<input type="button" name="ok" value="entrar" onClick="enviar()">

 

como eu poderia fazer pra resgatar o AjaxCheckResult dentro da funcao 'email' e 'enviar'?

eu iria fazer as funcoes que sao comuns à todos os casos e tratat o retorno separadamente

esse é meu problema, nao consigo retornar separado

com o metodo get eu consigo

 

sao varias funcoes que uso em janelas modal, e dependendo do retorno - 1=ok 0=erro - eu submeto a acao ou abro a modal de novo

 

obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí companheiro!

 

Segue abaixo um exemplo mais completo para que você possa estudá-lo e quem sabe ele possa te ajudar

no seu projeto.

 

//arquivo teste.php

<span style="background-color:rgb(235,235,235); color:#333333; font-family:sans-serif;">
e-mail:  <input type="text" value="" id="campo01">
Senha:  <input type="text" value="" id="campo02">
  
<input type="button" value="Entrar" onclick="entrar()">
</span>
<br><span style="font-size:11px; color:#333333; font-family:sans-serif;">
(Para testar use email =  teste@teste.com e senha = 1234)
</span>

<script language="JavaScript1.2">

function entrar()
{
email = document.getElementById('campo01').value.replace(/^\s+|\s+$/g,"");
//Atribui um valor à variável email já retirando-lhe os espaços iniciais e finais "Função Trim"
document.getElementById('campo01').value=email;
//Reescreve o valor na caixa de texto
senha = document.getElementById('campo02').value.replace(/^\s+|\s+$/g,"");
//Atribui um valor à variável senha já retirando-lhe os espaços iniciais e finais "Função Trim"
document.getElementById('campo02').value=senha;
//Reescreve o valor na caixa de texto
if(email == "" || senha == ""){ alert("Dados incorretos."); return false;}
//Antes de fazer a consulta via ajax faça uma higiênização dos dados tal como verificar se é um endereço de email
// válido etc.
//de modo a poupar trabalho para o servidor já que você poderá fazê-lo aqui.
ConsultaAjax(email,senha);
//alert(email +'\n'+senha); /*para teste*/
}

var xmlHttp;
function GetXmlHttpObject()
{
var xmlHttp=null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

function ConsultaAjax(email,senha)
{

xmlHttp = GetXmlHttpObject(); //Aqui "iniciamos o ajax" de acordo com o navegador do cliente
if (xmlHttp==null){alert ("O seu navegador não suporta AJAX!");return;}
url="consulta.php";// Página (URL) que irá receber os dados e retornar a resposta
StrData = "email="+email+"&senha="+senha;//Variáveis e seus respectivos valores quase igual ao método GET 
//a não pelo fato de NÂO colocarmos o ? sinal de interrogação antes da primeira variável
xmlHttp.open("POST",url,true);//Aqui informamos o método e a URL
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");//UTF-8 é o padrão
// se tiver problemas com acentuação dos caracteres em português adicione:  $_POST = array_map(utf8_decode, $_POST);  na página php	  
xmlHttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
xmlHttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); 
xmlHttp.setRequestHeader("Pragma", "no-cache"); 
xmlHttp.setRequestHeader('Content-length', StrData.length );
xmlHttp.send(StrData);//envio dos dados
xmlHttp.onreadystatechange = AjaxResult;//Função responsável por tratar os dados oriundos do servidor
//note que ao especificar a função não colocamos os parênteses.
}

function AjaxResult()
{
if (xmlHttp.readyState==4)//Resposta do servidor OK
{
if (xmlHttp.status==200)//Processo completado
{
// use xmlHttp.responseText para resposta em texto comum
//ou xmlHttp.responseXML para resposta em xml
//não se esqueça de que isto tem que estar corretamente configurado na "página alvo",
//no presente caso a página "consulta.php"

/* -------- Trabalhando com resposta em xml ----------------------

A página consulta.php está preparada para gerar um documento
xml cujo conteúdo tem a seguinte forma:

  <?xml version="1.0" encoding="ISO-8859-15" ?> 
  <resultado>
  <email>0</email> 
  <senha>0</senha> 
  </resultado>
  -------------------------------------------------------------------------------*/
  
//Os resultados podem ser obtidos assim
RX = xmlHttp.responseXML;
emailstatus = RX.getElementsByTagName('email')[0].childNodes[0].nodeValue;
senhastatus = RX.getElementsByTagName('senha')[0].childNodes[0].nodeValue;
//ou assim
//emailstatus = RX.getElementsByTagName('resultado')[0].childNodes[0].childNodes[0].nodeValue;
//senhastatus = RX.getElementsByTagName('resultado')[0].childNodes[1].childNodes[0].nodeValue;
if (emailstatus == 0) {alert("Usuário inexistente."); return false;}
if (senhastatus == 0)
{
if(confirm('Senha inválida \n\n Deseja utilizar o console de recuperação de senha')==false)
{
return false;
} else {window.location.replace('recupera_senha.php'); return true;}
}
if (emailstatus == 1 && senhastatus == 1)
{
alert("Bem-vindo. Você será redirecionado em um instante");
window.location.replace('index.php');
}
//alert(emailstatus+'\n'+senhastatus); /*para teste*/
}else{alert('Houve um problema com sua requisição.');}
}
}
</script>




//Esta é a página consulta.php


<?php
/* Não deixa o browser armazenar a página no cache para evitar problemas com conteúdo dinâmico */
header("Expires: Wed, 21 Dec 1983 09:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s ") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0″, false");
header("Pragma: no-cache");
// Quando estiver usando texto ou html use o cabeçalho abaixo
// header("Content-Type: text/html;  charset=ISO-8859-1",true);
//Quando estiver usando XML use este cabeçalho
header( "content-type: application/xml; charset=ISO-8859-15" );
//Decodificar todas as variáveis $_POST de uma só vez, utilizando o mapeamento de array: 
//Para resolver problemas com acentuação dos caracteres em português
//O padrão é o ajax enviar os caracteres codificados em UTF8 e aqui os convertemos para devolvê-los em ISO-8859-15
$_POST = array_map(utf8_decode, $_POST);


//Aqui deverá vir as consultas ao banco de dados onde estão cadastrados usuário e senhas
/*  *******************  IMPORTANTE  *********************************
	Não esqueça de se precaver contra SQL Injection e outras coisas mais...
********************************************************************* */


$x = 0;
$y = 0;
//Mas só pra testar utilizaremos isto:
if($_POST["email"]=="teste@teste.com") $x = 1; else $x = 0;
if($_POST["senha"]== "1234" ) $y = 1; else $y = 0;
if($x == 1 && $y ==1)
{session_start(); $_SESSION['UsuarioLogado'] == "va_em_frente";
//Estando tudo ok gravamos uma variável na seção para que outra página possa acessá-la
//e verificar se o usuário está logado
}


//Enviando a resposta via XML

//Criando um documento XML
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
//Criando alguns elementos do documento
$xml_elementopai = $xml->createElement( "resultado" );
$xml_elementofilhoum = $xml->createElement( "email", "$x" );
$xml_elementofilhodois = $xml->createElement( "senha", "$y" );
//Atribuindo os elementos filhos ao elemento pai
$xml_elementopai->appendChild($xml_elementofilhoum);
$xml_elementopai->appendChild($xml_elementofilhodois);
//Atribuindo o elemento pai ao documento XML
$xml->appendChild($xml_elementopai);
//"Mostrando" o resultado.
print $xml->saveXML();

?>

 

 

 

Particularmente eu não gosto de usar alert(), confirm, prompt, modal etc. prefiro alterar a página dinamincamente

com a introdução de novos códigos através do "innerHTML".

 

Espero que te ajude e até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buongiorno, obrigado novamente pela sua boa vontade :)

vou estudar melhor esse codigo

 

o caso do alerta que eu usei foi so pra mostrar onde ta chamando o resultado

eu retorno em modal, pq é em modal que comeca...

nao uso mais popup, entao optei em usar um modal em todos casos

quando abre um modal pra resgatar uma senha, por exemplo, caso o email nao estaja cadastrado, o modal se abre novamente com a mensagem do erro

 

quando submete o form do modal, ele fecha e abre de novo, nao foi a melhor solucao, eu sei, foi uma medida paleativa num caso meio urgente... o ajax e o modal irao continuar porem com ajax tb na hora de submeter, trocando pelo "abre fecha"

 

vou dar uma olhada com calma no codigo e ver o maximo que posso aprender, foi praticamente um tutorial :)

muito obrigado

volto pra dizer o resultado

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos la :)

 

essa é a funcao que você passou do login

function entrar(){
	email = document.getElementById('campo01').value;
	alert(email);
	ConsultaAjax(email);
}

e aqui é a onde ele exibe o resultado da consulta

function AjaxResult(){
	if (xmlHttp.readyState==4){
		if (xmlHttp.status==200){
		alert(xmlHttp.responseText);
		}else{
			alert('Houve um problema com sua requisição.');
		}
	}
}

ate ai ta certo ne?

nao confundi nada, creio eu

 

ja teriamos essa funcao de login pronta

e no caso de uma nova funcao pra 'enviar por email'

 

mesmo que eu crie outra funcao:

function enviar(){
ela sempre vai jogar pra dentro de:

function AjaxResult(){

nao teria uma forma de tratar o resultado dentro da respectiva funcao: enviar() ou na entrar()

 

o retorno da consulta sempre sera dentro de AjaxResult()?

nao ha como jogar pra fora?

 

pq nem sempre eu vou ter a mesma qtade de informacoes no retorno, por exemplo

- funcao enviar por email:

retorna - mensagem de email invalido (e o email) ou sucesso

- esqueci a senha:

retorna - mensagem de nao cadastrado ou sucesso

- funcao recomende a um amigo

retorna - mensagem de email invalido(com as informacoes nome e email do remetente e destinatario e texto) ou sucesso

 

entre outras funcoes

é ai que complica pra mim

 

alguma dica de como resolver essa parada?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

"...nao teria uma forma de tratar o resultado dentro da respectiva funcao: enviar() ou na entrar()

 

o retorno da consulta sempre sera dentro de AjaxResult()?

nao ha como jogar pra fora?..."

 

 

Pense no seguinte:

 

Você chama a função "enviar()" e ela mesma ou uma segunda função

envia os dados via Ajax. Até que os dados cheguem ao servidor

e este responda à sua solicitação a execução da função enviar() já

terminou. Imagine então que essa resposta pode demorar vários

segundos e nem sabemos se ela virá ou não! A nossa função "enviar()"

não pode ficar esperando indefinidamente e travando a página não é mesmo?

 

Portanto a lógica é esta: uma função envia e uma outra recebe os dados.

 

A função que recebe os dados pode normalmente interpretá-los e chamar

outras funções para que elas executem algum trabalho específico.

 

Você pode usar uma mesma função para enviar diversas variáveis ao mesmo

tempo e tratar as respostas separadamente. Veja o exemplo que lhe dei

usando XML. Por exemplo: quando você quer tratar apenas a variável "email"

as demais estarão vazias ou igual a zero. A partir disto você deve usar

alguns "IF" ou "SWITCH" por ex. para comparar o valor dessas variáveis e

desidir sobre o quê você deseja como resposta. Você também pode usar uma

variável para que esta guarde o nome do assunto que você está tratando,

então você envia essa variável para o servidor e faz com que ele a mande

de volta. Dessa forma você terá a sua resposta e a variável lhe dirá do

quê se trata.

 

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu campeao

problema resolvido com a sua funcao :)

 

so hj (4:40) que eu terminei de implementar um sistema de modal e to usando a sua funcao

 

obrigadao

quebrou um galho duka

 

abracos

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.