• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Tesla

Duvida sobre Ajax

7 mensagens neste tópico

Digam-me uma coisa, em vez de usar páginas *.html posso usar páginas *.php para fazer o display do XMLHttpRequest?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a perceber bem a tua dúvida, o nome do ficheiro não interessa par amuito neste caso. O que interessa é que o resultado desse pedido tem que ser tratado no cliente usando javascript, não pode ser tratado com PHP no servidor.

As bibliotecas de ajax para PHP o que fazem é escrever javascript que é enviado para o cliente e processado lá.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, já estou a desesperar com isto. Sinceramente o sentimento é de revolta e apetece-me partir umas quantas coisas.

Não consigo perceber onde está o problema, como tal vou passar para aqui os códigos e informação relevante que vos possam ajudar-me a solucionar este problema.

Antes de mais, estou a trabalhar com o notepad, php5.2.8 e Apache 2.2.x.

Todos os ficheiros estão a ser criados com a extensão *.php

Todos os ficheiros que fazem parte da apresentação seguinte estão na mesma directoria.

Como introdução devo informar que uma página (insere.php) tem o código AJAX no HEAD, e tenta chamar a página insere_agen.php e recolher o valor que lá está.

O código AJAX:

function guarda_agen_ins()
{

Http=browser();
if (Http==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }

Http.open('GET','insere_agen.php');
Http.onreadystatechange=mostra_info();
Http.send(null);

}

function mostra_info()
{
if (Http.readyState==4)
{
document.getElementById('txtHint').innerHTML=Http.responseText;
}
}

function browser(){
  var xmlhttp;

  /*@cc_on

  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(E){
      xmlhttp = false;
    }
  }
  @else
    xmlhttp = false;
  @end @*/

  if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
    try {
      xmlhttp = new XMLHttpRequest();
    }catch(e){
      xmlhttp = false;
    }
  }

  return xmlhttp;
}

O código que está na página insere.php:

<tr>
                               <td colspan="2"><p align=center><input type="button" value="Registar" style="font-family: Verdana; font-size: 11px;" onClick="guarda_agen_ins();"></p></td>
                               </tr>
                               <tr>
                               <td colspan="2"> </td>
                               </tr>
                               <tr>
                               <td colspan="2"><p align=center><b><div id="txtHint"></div></b></p></td>
                               </tr>

Basicamente, o que estão a ver é o butão que tenta despoletar o uso do código AJAX e o sítio onde a informação recolhida deveria ser apresentada.

Página insere_agen.php

<?php
$mensagem="Olá mundo!";
echo $mensagem;
?>

Como já disse acima não consigo perceber porque raio a mensagem não é apresentada na página insere.php. Já dei voltas e voltas e nada! Começo mesmo a sentir-me frustrado!  :rant_01:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Código a funcionar

function guarda_agen_ins()
{

Http=browser();
if (Http==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }

Http.open('GET','insere_agen.php');
Http.onreadystatechange=mostra_info;
Http.send(null);

}

function mostra_info()
{
if (Http.readyState==4)
{
document.getElementById('txtHint').innerHTML=Http.responseText;
}
}

function browser(){
  var xmlhttp;

  /*@cc_on

  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(E){
      xmlhttp = false;
    }
  }
  @else
    xmlhttp = false;
  @end @*/

  if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
    try {
      xmlhttp = new XMLHttpRequest();
    }catch(e){
      xmlhttp = false;
    }
  }

  return xmlhttp;
}

Mais bonito:

function browser() {
  var xmlhttp;

  if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
    try {
      xmlhttp = new XMLHttpRequest();
    } catch(e) {
      xmlhttp = false;
    }
  }

  return xmlhttp;
}

var Http=browser();

function guarda_agen_ins(){
Http.open('GET','insere_agen.php');

Http.onreadystatechange=mostra_info;

Http.send(null);
}

function mostra_info() {
if (Http.readyState==4) {
	var response = Http.responseText;
	document.getElementById('txtHint').innerHTML = response;
}
}


0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá skin.

Antes de mais obrigado porque o código bonito funcionou. O feio não tentei, mas estive a compará-lo com o código que eu tinha colocado e a única diferença que encontrei foi em http.readystatechange=mostra_info(); teres subsituido por http.readystatechange=mostra_info;

Ou seja, a eliminação dos parêntses foi o suficiente para por o código a funcionar. Foi só isto, ou fizeste mais alguma coisa que me está a escapar?

Abraço, e mais uma vez obrigado! :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá skin.

Antes de mais obrigado porque o código bonito funcionou. O feio não tentei, mas estive a compará-lo com o código que eu tinha colocado e a única diferença que encontrei foi em http.readystatechange=mostra_info(); teres subsituido por http.readystatechange=mostra_info;

Ou seja, a eliminação dos parêntses foi o suficiente para por o código a funcionar. Foi só isto, ou fizeste mais alguma coisa que me está a escapar?

Abraço, e mais uma vez obrigado! :(

O http.readystatechange é um método que é suposto ser executado no dito evento, e tu queres que o método aponte para a função mostra_info e não para o resultado da função mostra_info (que é o que acontece quando metes os () que a fazem executar).
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora