Olá, estou tendo um problema ao tentar mandar um valor para uma pagina php via ajax. Pra tentar resolver eu simplifiquei ao maximo o codigo que segue:
<!DOCTYPE html>
<html>
<title>index.php</title>
<head>
<script type="text/javascript"></script>
<script>
function clic() {
var ajax = new XMLHttpRequest();
ajax.open("POST", "index.php", true);
ajax.setRequestHeader("Cache-Control", "no-cache, must-revalidate");
ajax.setRequestHeader("Pragma", "no-cache");
ajax.send("variavel=FUNCIONOU");
}
</script>
</head>
<body>
<button onclick="clic()">TestButton</button>
<?php
$x = $_POST['variavel'];
echo $x;
?>
</body>
</html>
A idéia de tudo isso é fazer com que minha aplicação envie um valor conforme um botão clicado pelo usuario, e através do php armazene em mysql, mas eu não estou obtendo nenhuma resposta na minha variavel no php.
vamos la
o php é sincrono. ajax não.
vc vai carregar index.php e ai vc entra nesse echo $x
que… nao tem nada.
ajax é assincrono. em algum momento ele vai mandar esse post. o seu objeto XMLHttpRequest é que vai receber o resultado.
quer brincar?
- coloque esse codigo em um index.html
- o seu index.php tem só o echo da variavel vinda por POST
-
antes do ajax.send, adicione algo assim
ajax.onreadystatechange = function () {
if(ajax.readyState === XMLHttpRequest.DONE && ajax.status === 200) {
alert(xhr.responseText);
}
};
em algum momento apos o click vc vai ver um alert.
nesse ponto vc entendeu ajax. e entendeu php. e entendeu que uma coisa fala com a outra com o protocolo HTTP
ai como vc escreve o conteudo na pagina? ai vc usa o DOM.
vc pode criar uma div de id “qqcoisa”
pede pro document um elemento de id “qqcoisa” - via document.getElementById(…)
vai retornar um objeto que tem propriedade .innerHTML
vai brincando com isso. faz objeto.innerHTML= “BUUU”;
com jQuery é mais facil. mas aprende com js puro primeiro q é mais divertido.
ps: movi ora Front-end que faz mais sentido
Peczenyj, você pode me ajudar? Eu uso Ajax sem jQuery igual ao Leandro e tenho um erro…Após enviar minhas requisições Ajax para o PHP, no fim do script php, eu retorno um echo, echo “envio_ok”; por exemplo, e pego essa string com responseText e comparo com ==
If (a.responseText == "envio_ok"){
Faça isso } else { faça aquilo }
O JavaScript não entende esse IF e acaba travando aqui, se eu colocar apenas um = ele executa o IF , porém se eu tiver um ELSE IF nessa condição do responseText, ele executa o ELSE… Faz tempo que eu tento solucionar isso.
Não posso colocar o código agora, porque estou com o note quebrado. Mas se você tiver tempo e puder me ajudar, eu envio para você meus códigos assim que consertar o note aqui!
Peço desculpas ao Leandro por invadir a dúvida dele com a minha!
no javascript faz um alert(a.responseText) e ve o que retorna.
usar = puro em um if é completamente errado, = é operador de atribuição, enquanto == e === são de comparação ( o primeiro tem regras de coerção se os tipos forem diferentes, o ultimo verifica se o conteudo E o tipo são os mesmos ).
Já havia testado o alert, e ele retorna o echo do php normal, envio_ok , muito estranho esse erro, testei no local host e num servidor online, o erro persiste, já tentei usar === também, tentei muita coisa e nada…O pior é que meu site está todo assim, com = nos IFS do AJAX 
= no if ate faz sentido. mas em casos bem particulares
if( variavel = alguma_coisa ){
// variavel aqui dentro vai 'alguma_coisa', SE esta coisa for algo que se entenda como verdadeiro
}
agora vamos ver, faz um alert assim
alert(" recebido >" + a.responseText + "< ");
assim se tiver uma quebra de linha ou um espaço em branco em algum lugar, vc vai saber.
é por isso que em ajax é comum retornar um json, pois o javascript vai parsear a estrutura de dados e encontrar os valores certos. como
{ “status”:“OK”}
isso + http status code ajuda muito.
Vou testar assim que pude esse exmplo do
alert(" recebido >" + a.responseText + "< ");
assim que puder e fazer mais testes. valeu pela força Peczeny!