Código PHP:
<?php
session_start();
// varias lineas que no interesan
header("Location:".$_SERVER['HTTP_REFERER']);
?>
| |||
Aplicacion php ajax el siguiente script: Código PHP: |
| |||
Re: Aplicacion php ajax Hola. Puedes recoger el valor del referer en javascript y se lo pasas a PHP en el primer request AJAX:
Código:
Lo recibes en PHP con $_GET $_POST o $_REQUEST y si te va a hacer falta despues, lo asignas a una variable de sesión, por ejemplo var desde = document.referrer; //juraría que es con dos erres, si no, le quitas una... "http://loquesea.com/loquesea.php?origen="+desde; Código PHP: |
| |||
Re: Aplicacion php ajax Si quieres probar el referrer con javascript crea estos dos archivos html o php: referrer1.html Código HTML: <html> <head> <script> location = "referrer2.html"; </script> </head> <body> </body> </html> Código HTML: <html> <head> <script> var llamada_desde = document.referrer; alert(llamada_desde); </script> </head> <body> </body> </html> Para tu caso, si en la página que carga una url con AJAX haces esto:
Código:
//Hacemos una cadena tipo "?ref=loquesea" para pasar un parámetro en la url a la que accedemos con AJAX var el_referrer = "?ref="+document.referrer; //Donde describimos la url que se cargará le agregamos el parámetro ref ajax.open("GET","loquesea.php"+el_referrer); Luego en loquesea.php podría poner: Código PHP: |
| |||
Re: Aplicacion php ajax hice lo que me aconsejaste pero tengo el siguiente problema; La navegacion de mi sitio es: pagina1, llama a la pagina2, y debe volver a la pagina1, pero con la solucion anterior me quedo en la pagina2, es decir que no me esta direccionado a pagina 1 nuevamente; es mas me abre una nueva ventana con la pagina1, ni siquiera me la carga en el contenedor de Ajax. Los cambios que hice son los siguientes: Codigo Ajax (*************esta marcado asi para ver donde realice los cambios en AJAX)
Código:
Codigo PHP agregacar.php// Documento JavaScript // Esta función cargará las paginas function llamarasincrono(url, id_contenedor){ var pagina_requerida = false if (window.XMLHttpRequest) {// Si es Mozilla, Safari etc pagina_requerida = new XMLHttpRequest() } else if (window.ActiveXObject){ // pero si es IE try { pagina_requerida = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ // en caso que sea una versión antigua try{ pagina_requerida = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else return false pagina_requerida.onreadystatechange=function(){ // función de respuesta cargarpagina(pagina_requerida, id_contenedor) } //pagina_requerida.open('GET', url, true) // asignamos los métodos open y send var el_referre = "?ref="+document.referrer; pagina_requerida.open('GET', "agregacar.php"+el_referrer, true) //********************* las dos lineas anteriores fueron las del cambio********************************* pagina_requerida.send(null) } // todo es correcto y ha llegado el momento de poner la información requerida // en su sitio en la pagina xhtml function cargarpagina(pagina_requerida, id_contenedor){ if (pagina_requerida.readyState == 4 && (pagina_requerida.status==200 || window.location.href.indexOf("http")==-1)) document.getElementById(id_contenedor).innerHTML=pagina_requerida.responseText } Código PHP: |
| |||
Re: Aplicacion php ajax Hola, en esta línea te falta una "r" en el nombre de la variable: Prueba a poner un alert para ver cual es el referrer que le envías: Código PHP: |
| |||
Al hacer los cambios pierdo la accion de ajax Es decir los vinculos de carga de pagina no me funcionan; y en el archivo php no tengo ningun echo. No cargo nada en los contenedores de pagina de Ajax. Gracias y seguiremos en la busqueda |
| |||
Sigo todavia con el problema Al hacer los cambios expuestos en respuestas anteriores, me quita toda la navegacion de Ajax, por mas vuelta que le estoy dando no logro dar con el problema (alguna idea de navegacion en alguna pagina que me permita profundizar mas en el tema). Desde ya muchas gracias, chau y saludos |
| |||
Re: Aplicacion php ajax Hola jp: Vamos a ver, si lo que quieres es cargar datos en un elemento de la página, no puedes hacer un header("Location: loquesea.php"); porque esto no devuelve datos para incorporar en un elemento de la página que lo llamó. Para recibir datos en la página que lo llamó con ajax deberás enviar algo en el cuerpo de la respuesta, no en la cabecera/header. header lo que hace es redireccionar a la página que le pongas sin devolver datos en el cuerpo de la respuesta. A ver si puedes aclarar que quieres hacer con ajax: 1.- Quieres cargar datos en un elemento de pagina2 2.- Quieres que te redireccione a la pagina1 (no haría falta ajax) 3.- Quieres cargar el contenido de la pagina1 en un elemento/contenedor de pagina2 (pagina1 no podría llevar elementos como <html>, <head> o <body> porque ya están en pagina2) 4.- Quieres cargar parte de pagina1 en pagina2 |
| |||
Re: Aplicacion php ajax mira el asunto es asi: Yo tengo la pagina principal llamada Index, esta a su vez tiene una parte donde cargo distintas paginas (un contenedor llamado contenidos). Este contenedor cambia con distintas paginas PHP, esta pagina php a su vez tiene un boton que al activar con un clic llama a otra pagina php (que esta solo trabaja del lado del servidor, es decir no muestra nada en la interfaz del usuario web, solo agrega datos a un array), esta pagina de agregar tiene un header que envia a la pagina que la llamo, es ahi donde se me arma el problema porque el contenedor vuelve a la pagina principal y no a la pagina php que mostraba con el boton que activa esa otra pagina. Bueno no se si aclare el problema, pero estamos en contacto, gracias por todo |
| |||
Re: Aplicacion php ajax el archivo que se carga en el contenedor es este: Código PHP: Código PHP: Código PHP:
Código:
Bueno espero que sirva, y gracias nuevamente // Documento JavaScript // Esta función cargará las paginas function llamarasincrono(url, id_contenedor){ var pagina_requerida = false if (window.XMLHttpRequest) {// Si es Mozilla, Safari etc pagina_requerida = new XMLHttpRequest() } else if (window.ActiveXObject){ // pero si es IE try { pagina_requerida = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ // en caso que sea una versión antigua try{ pagina_requerida = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else return false pagina_requerida.onreadystatechange=function(){ // función de respuesta cargarpagina(pagina_requerida, id_contenedor) } pagina_requerida.open('GET', url, true) // asignamos los métodos open y send pagina_requerida.send(null) } // todo es correcto y ha llegado el momento de poner la información requerida // en su sitio en la pagina xhtml function cargarpagina(pagina_requerida, id_contenedor){ if (pagina_requerida.readyState == 4 && (pagina_requerida.status==200 || window.location.href.indexOf("http")==-1)) document.getElementById(id_contenedor).innerHTML=pagina_requerida.responseText } |
| |||
Re: Aplicacion php ajax Hola jprolando. Cuando tenga tiempo te miro algo pero de pronto lo que veo es que dentro de un contenedor del documento quieres cargar otro documento completo con <html><head><body>... y no sé si el navagador lo hace pero creo que no debería... Por otro lado cuando envías: header("Location: algo.php"); en AJAX no recibirás un estado 200 si no que posiblemente recibas un 302 REDIRECT o algo así. Prueba a ver que te da esto:
Código:
if (pagina_requerida.readyState == 4) { alert(pagina_requerida.statusText + " : " + pagina_requerida.status); } Última edición por vengava; 26/12/2006 a las 09:26 |
| |||
Re: Aplicacion php ajax Pues a mí me devuelve un código HTTP 302. No sé como maneja esto internamente AJAX, pero el caso es que el header location es una cabecera HTTP y el cuerpo de la página viene vacío: Create un prueba.php: Código PHP: inicio --> ejecutar --> teclea cmd --> pulsa ENTER --> Escribe lo siguiente telnet localhost 80 [ENTER] GET /prueba.php HTTP/1.1 [ENTER] HOST: localhost [ENTER 2 veces] A mí me devuelve esto: HTTP/1.1 302 Found Date: Wed, 27 Dec 2006 18:03:08 GMT Server: Apache Location: http://www.google.com Content-Length: 0 Content-Type: text/html; charset=ISO-8859-1 Y como ves, esto sólo informa al navegador a qué url tiene que hacer la petición. Probablemente el objecto XMLHttpRequest llame a google (en este caso) en los estados anteriores a readystate==4, pero no lo sé. Has probado a hacer un alert(ajax.responseText) o a cargar en una textarea el responseText para ver que es lo que cargas? Última edición por vengava; 27/12/2006 a las 12:22 |
| |||
Re: Aplicacion php ajax Por otro lado, si lo que quieres es enviar datos a agregacar.php y quedarte en la misma página puedes llamar a agregacar con ajax quitando el header location del php. De esa manera agregarías el producto al carro y te quedarías en la misma página |
| |||
Re: Aplicacion php ajax Puedes crear temporalmente una textarea en la página donde haces la llamada ajax: Código HTML: <textarea id="areatexto" cols="30" rows="10"></textarea>
Código:
Y a ver que pone... if (pagina_requerida.readyState == 4) { document.getElementById("areatexto").value = pagina_requerida.responseText; } Última edición por vengava; 27/12/2006 a las 13:47 |
| |||
Re: Aplicacion php ajax No entiendo mucho tu idea. Lo que pasa que el agregar lo invoco de otro archivo php que invoco en el contenedor (en los codigos anteriores esta). Pero bueno con tal de probar no hay problem, lo que no me imagino como hacerlo, bueno gracias por tu gran ayuda, Saludos |
| |||
Re: Aplicacion php ajax Lo que quiero decir es que para enviar datos a agregacar.php, en lugar de esto: Código HTML: <a href="contenidos/agregacar.php... Código HTML: <a href='javascript:llamarasincrono("contenidos/agregacar.php... |
| |||
Re: Aplicacion php ajax tu sabes que quedo barbaro, pero ahora tengo otro problema que cuando agrego quiero que me cambie la imagen de comprar a agregado y con esto no se carga nuevamente la pagina, por lo tanto la imagen no vuelve a cambiar. Me explique o no??? Te paso el archivo como quedo ahora Código PHP: |
| |||
Re: Aplicacion php ajax Me alegro de que saliera algo Vale para las imágenes puedes probar esto, yo no lo probé tal cual te lo pongo pero creo que va bien: 1.- Agrégale un atributo id a la imagen para poder acceder a ella: Código HTML: <img id="estado_compra" src="/imagenes/comprar.gif" border="0" title="Agregar al Carrito"> Código HTML: if (pagina_requerida.readyState == 4) { if(pagina_requerida.status==200) { cargaImagen("estado_compra","/imagenes/agregado.gif","Ya lo seleccionó"); } } Código HTML: function cargaImagen(img_id, img_src, img_tit) { var imagen_carro = document.getElementById(img_id); imagen_carro.src = img_src; imagen_carro.title = img_tit; } |
| |||
Re: Aplicacion php ajax Bueno lo pruebo y te comento, las funciones de cambio de imagen lo realizo en mi archivo de ajax (viste que te pregunto ya que soy bastante nuevo en el tema de ajax). Por supuesto que gracias nuevamente, saludos |
| |||
Lo coloque en mi archivo de Ajax Bueno tu sabes que me genere el codigo que me aconsejaste en el archivo que ejecuto todo lo relacionado a ajax; pero la imagen sigue sin cambiar. Bueno seguiremos intentando, como siempre cualquier aporte sera bienvenido, gracias y saludos. Te paso por las dudas el codigo del archivo Ajax
Código:
// Documento JavaScript // Esta función cargará las paginas function llamarasincrono(url, id_contenedor){ var pagina_requerida = false if (window.XMLHttpRequest) {// Si es Mozilla, Safari etc pagina_requerida = new XMLHttpRequest() } else if (window.ActiveXObject){ // pero si es IE try { pagina_requerida = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ // en caso que sea una versión antigua try { pagina_requerida = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else return false pagina_requerida.onreadystatechange=function(){ // función de respuesta cargarpagina(pagina_requerida, id_contenedor) } pagina_requerida.open('GET', url, true) // asignamos los métodos open y send pagina_requerida.send(null) } //condicion y funcion para cambio de imagen if (pagina_requerida.readyState == 4){ if (pagina_requerida.status == 200){ cargaImagen("estado_compra","/imagenes/agregado.gif", "Ya lo selecciono"); } } function cargaImagen (img_id, img_src, img_tit){ var imagen_carro = document.getElementById (img_id); imagen_carro.src = img_src; imagen_carro.title = img_tit; } // todo es correcto y ha llegado el momento de poner la información requerida // en su sitio en la pagina xhtml function cargarpagina(pagina_requerida, id_contenedor){ if (pagina_requerida.readyState == 4 && (pagina_requerida.status==200 || window.location.href.indexOf("http")==-1)) document.getElementById(id_contenedor).innerHTML=pagina_requerida.responseText } |
| |||
Re: Aplicacion php ajax Hola: La función cargaImagen la debes llamar en tu función cargarpagina, una vez que compruebas que se ha completado la petición (pagina_requerida.readyState == 4) y que el estado HTTP es 200 OK (pagina_requerida.status==200). Al cumplirse esas dos condiciones, supuestamente habrás añadido al carro lo que sea y puedes llamar a cargaImagen. Pero como cargarpagina no sólo la llamas para agregacar.php deberás controlar en el código que te cambie de imagen sólo cuando hayas llamado a agregacar.php. Para eso, podrías devolver algo en agregacar.php (por ejemplo echo "CARRO_OK") que te indique que has agregado algo al carro. La respuesta ajax, como sabes te entra en tu método cargarpagina cuando el pagina_requerida.readystate==4 (petición procesada) y el pagina_requerida.status ==200 (respuesta OK) en la propiedad pagina_requerida.responseText. Si compruebas que pagina_requerida.responseText=="CARRO_OK" llamas a cargarImagen |
| |||
Re: Aplicacion php ajax Bueno me perdi totalmente (te pase el codigo ajax, completado con las lineas que me pasastes); pero la verdad no entendi muy bien lo que tengo que hacer (acordate que Ajax me hace perder un poco el hilo de la programacion). |
| |||
Re: Aplicacion php ajax En principio debes ponerlo aquí: Código HTML: function cargarpagina(pagina_requerida, id_contenedor){ if (pagina_requerida.readyState == 4 && (pagina_requerida.status==200 || window.location.href.indexOf("http")==-1)) { document.getElementById(id_contenedor).innerHTML=pagina_requerida.responseText; cargaImagen("estado_compra","/imagenes/agregado.gif", "Ya lo selecciono"); } } Una pregunta: ¿porqué en el método cargarpagina pones esto:? Código HTML: window.location.href.indexOf("http")==-1 |
| |||
Re: Aplicacion php ajax Sinceramente no se, este codigo me lo pasaron (por supuesto que estoy leyendo algo); asi que de ajax mucho no entiendo, a lo mejor si lo quito no cambia nada, voy a probar y te comento, gracias y saludos |