Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou fazendo um post com Ajax e retornando texto, até aí Ok, no entanto gostaria de exibir um alerta. Tentei junto ao meu retorno Json isso:
(básico demais)
<script type="text/javascript">
alert('Alerta!');
</script>
E não funcionou...
Alguém pode me dar uma luz?
Posta o seu código aonde você faz a requisição ajax.
Pensei nisso, estava tentando fazer uma comparação, de alguma forma exibir o alerta somente SE, mas como sou ruinzin no Javascript, complica!
A requisição é esta:
$(document).ready(function() {
$("input[name=email]").change(function() {
function getById() {
var $result = document.getElementById("result"),
email = document.getElementById("email").value,
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "lib/ajax_email.php?email=" + email + "&codCurso=<?php echo $codCurso; ?>", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$result.innerHTML = xmlhttp.responseText;
} else {
$result.innerHTML = "Um erro ocorreu: " + xmlhttp.statusText;
}
};
}
getById();
})
})
@Edit:
Teria como trazer uma váriavel (PHP) do retorno e fazer um IF caso ela exista e exibir o alerta?
Que confusão... uma forma de organizar melhor:
function getById() {
var $result = document.getElementById("result"),
email = document.getElementById("email").value,
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "lib/ajax_email.php?email=" + email + "&codCurso=<?php echo $codCurso; ?>", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$result.innerHTML = xmlhttp.responseText;
alert('Alerta!'); // aqui vc faz seu IF
} else {
$result.innerHTML = "Um erro ocorreu: " + xmlhttp.statusText;
}
};
}
$(document).ready(function() {
$("input[name=email]").change(getById);
});Obrigado por organizar o código!
Mas não dá pra fazer esse IF com o PHP né? Tentei retornar no Json uma váriavel PHP e fazer o IF, caso exista aparece o alerta.
Ex.:
<?php if($row->queryFound){ ?>
alert('Alerta!'); // aqui você faz seu IF
<?php } ?>
Vou tentar com o Javascript.. Mas, como recuperar uma variável e transformar em Javascript?
@Edit:
Assim moreless?
$( nome ).val( json.nome );
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$result.innerHTML = xmlhttp.responseText;
if(xmlhttp.responseText === 'ae') {
alert('Alerta!');
}
} else {
$result.innerHTML = "Um erro ocorreu: " + xmlhttp.statusText;
}
};entendeu a idéia ?
Ai vc faz o php retornar um JSON e pode trabalhar melhor esse retorno. Colocando uma parte do JSON no $result, e outra para fazer o if.
Até aí tudo bem, essa ideia eu estava em mente sim. Mas por exemplo, eu tenho o json_encoded, uma váriavel $found = 'yes'; agora no Javascript eu gostaria de chamala, algo como json.found.
Como recuperar uma váriavel especifica do Json?
Exatamente desse jeito ai q vc disse.
E estude sobre JSONparse
Aquele XML response e responseText me confundiram a ideia, essa função traz a váriavel Json também?
Porque eu mudei, estou tentando assim agora?
$(document).ready(function(){
$("input[name='email']").change(function(){
var email = $("input[name='email']");
var codCurso = <?php echo $codCurso; ?>;
$.getJSON(
'lib/ajax_email.php',
{ email: $( this ).val(),
codCurso: codCurso
},
function( json )
{
var email = json.email;
alert('Alerta!' + email);
}
);
});
});
Mas a váriavel vem undefined... :x
Se tá vindo undefined, então tem erro no seu php.
Aprenda a debugar:
Agora eu consigui recuperar, no entanto, eu não consigo enviar os parametros necessários ao GET nessa linha:
{ email: $( this ).val(), codCurso: codCurso },
Se eu mudar a URL com os valores que eu desejo eu consigo...
Não entendi a dúvida.
Pq não consegue ? O que acontece ?
Resolvi dessa maneira:
$(document).ready(function(){
$("input[name='email']").change(function(){
var email = $("input[name='email']");
var codCurso = <?php echo $codCurso; ?>;
$.getJSON(
'lib/ajax_email.php',
{ email: $( this ).val(), codCurso: codCurso },
function( json )
{
var nome = json.nome;
var codCurso = json.codCurso;
alert('Você já está inscrito nesse evento. Deseja reemitir seu comprovante ' + nome + '?');
}
);
});
});
Era o resultado, eu debuguei e vi que estava enviando, mas o resultado do PHP não estava vindo... Agora vou aplicar o IF (:outra forma...
$('#email').change(function(){
var email = $(this).val(),
codCurso = 595;
$.getJSON('test.php?email='+email+'&codigo='+codCurso, function(data){
if( data[0].ok == 1 ){
alert('Sucesso!\n\nEmail: '+data[0].e+'\nCodigo: '+data[0].c);
}else{
alert('Erro:\n' + data)
}
});
});
PHP
if( isset( $_GET['email'], $_GET['codigo'] ) ){
$data[0] = array(
'ok' => '1',
'e' => $_GET['email'],
'c' => $_GET['codigo']
);
echo json_encode( $data );
}Uma dúvida mais técnica agora.. eu carrego a página pela primeira vez, digito email, ele faz a consulta e o resultado desejado. Agora eu retorno a página (pois ela me redireciona), (aí o campo já vem preenchido) então, se eu tento digitar o e-mail novamente, ele nada faz, não realiza a consulta... porque isso acontece?
@Edit:
Pelo que pudê observar, ele só realiza a consulta se eu alterar o campo ou exclui e preencher novamente!
@Edit:
Ficou meio contraditório... uma hora funciona e outra não?! Pois bem, digitei o e-mail, ele me redirecionou pra outra página, agora eu volto manualmente a página, então o campo vem preenchido, se eu tento entrar no campo e sair ele não faz nada, caso eu edite, ele refaz a requisição!
>
Uma dúvida mais técnica agora.. eu carrego a página pela primeira vez, digito email, ele faz a consulta e o resultado desejado. Agora eu retorno a página (pois ela me redireciona), (aí o campo já vem preenchido) então, se eu tento digitar o e-mail novamente, ele nada faz, não realiza a consulta... porque isso acontece?
@Edit:
Pelo que pudê observar, ele só realiza a consulta se eu alterar o campo ou exclui e preencher novamente!
Acredito que por que o valor seja o mesmo.
como contorna isso?
assim...
$('#email').on('blur', function(){
...
});Perfeito!
Brincando com o Javascript, hehe!
Minha solução em base na ajuda de todos que colaboraram:
JavaScript:
$(document).ready(function(){
$("input[name='email']").on('blur', function(){
var email = $("input[name='email']");
var codCurso = <?php echo $codCurso; ?>;
$.getJSON(
'lib/ajax/ajax_email.php',
{ email: $( this ).val(),
codCurso: codCurso
},
function( json )
{
var NomeAluno = json.NomeAluno;
var codAluno = json.codAluno;
var codEvento = json.codEvento;
var result = json.result;
if(result === 'TRUE') {
var r = confirm('Você já está inscrito nesse evento. Deseja reemitir seu comprovante ' + NomeAluno + '?');
if (r == true)
{
location.href = 'comprovante.php?id=' + codAluno;
}
else
{
alert('Redirecionando...');
location.href = 'index.php';
}
}
}
);
});
});
PHP:
<?php
if(isset($_GET['email'], $_GET['codCurso']) && !empty($_GET['email']) && !empty($_GET['codCurso']))
{
$email = $_GET['email'];
$codCurso = $_GET['codCurso'];
$query = mysql_query("SELECT a.CodAluno, a.NomeAluno, a.EmailAluno, e.CodEvento
FROM `Aluno` a
INNER JOIN `Evento` e ON e.CodEvento = ea.CodEvento
WHERE a.EmailAluno = '{$email}' AND e.CodEvento = '{$codCurso}'", $connescola) or die(mysql_error());
$arr = Array();
if(mysql_num_rows($query))
{
$row = mysql_fetch_object($query);
$arr['NomeAluno'] = $row->NomeAluno;
$arr['codAluno'] = $row->CodAluno;
$arr['codEvento'] = $row->CodEvento;
$arr['result'] = 'TRUE';
}
echo json_encode($arr);
}
Obrigado a todos! :D
Quem vai executar o alerta é o client, depois do retorno.