Foros del Web » Programando para Internet » PHP »

JSON php

Estas en el tema de JSON php en el foro de PHP en Foros del Web. Buenas, tengo el siguiente problema: Tengo una página donde se muestra una tabla. En cada columna de la tabla hay la opción de modificar esa ...
  #1 (permalink)  
Antiguo 12/06/2012, 05:24
 
Fecha de Ingreso: abril-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 1
JSON php

Buenas, tengo el siguiente problema:

Tengo una página donde se muestra una tabla. En cada columna de la tabla hay la opción de modificar esa fila. Cuando el usuario modifica esa fila se crear una conexión XMLHttpRequest para actualizar mediante Ajax, hasta aquí bien. Una vez actualizada la base de datos, se ejecuta una función javascript para pedir los nuevos datos de la base de dtaos y actualizarla en pantalla (también mediante javascript).

Cuando se ejecuta la página por primera vez todo perfecto, pero cuando el usuario selecciona modificar la nueva visualización que debería mostrar la tabla ya actualizada muestra la tabla con los datos antiguos. Los daos los devuelvo de php a javascript mediante json. Los datos que me devuelve el archivo que se encarga de recuperar los datos de la base de datos son los iniciales pero en la base de datos si aparece la modificación. Y.... ESTO SOLO ME OCURRE EN Internet Explorer. He probado en Chrome, Firefox y Opera y me funciona correctamente.

Archivo php que recupera la colección de datos de la base de datos:

Código PHP:
<?php
header
('Content-Type: text/txt; charset=ISO-8859-1');
include_once(
'clases.php');

$fecha1 $_REQUEST['anio'].'-01-01';

$fecha2 $_REQUEST['anio'].'-12-31';


$rows = new colCuentaProveedor($_REQUEST['dni'],$fecha1,$fecha2);

require(
"Services_JSON-1.0.3/JSON.php");

$json = new Services_JSON();
$cad $json->encode($rows);

echo 
$cad;
?>
Arvhivo javascript que me muestra la actualización:

Código Javascript:
Ver original
  1. function procesarEventos1(){
  2.     var tabla = document.getElementById('cuenta');
  3.  
  4.     if(conexion.readyState == 4){
  5.         alert(conexion.responseText);
  6.  
  7.         var fila1 = tabla.insertRow(-1);
var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Fecha Factura";

var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Nº Factura";

var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Concepto";

var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Debe";

var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Haber";

var celda1 = fila1.insertCell(-1);
celda1.innerHTML = "Saldo";

var datos = eval("("+conexion.responseText+")");
var miArray = new Array("seleccione opcion","modificar","eliminar");

var saldo = 0;
for(i=0;i<datos.rows.length;i++){

var fila = tabla.insertRow(-1);
var celda = fila.insertCell(-1);
celda.innerHTML = datos.rows[i].fecha_fac;
celda = fila.insertCell(-1);
celda.innerHTML = datos.rows[i].num_fac;
celda = fila.insertCell(-1);
celda.innerHTML = datos.rows[i].Concepto;
celda = fila.insertCell(-1);
celda.innerHTML = datos.rows[i].debe;
celda = fila.insertCell(-1);
celda.innerHTML = datos.rows[i].haber;
celda = fila.insertCell(-1);
if(parseFloat(datos.rows[i].haber<0)){
saldo = saldo+parseFloat(datos.rows[i].debe)-(-1)*parseFloat(datos.rows[i].haber);
}
saldo = saldo+parseFloat(datos.rows[i].debe)-parseFloat(datos.rows[i].haber);
celda.innerHTML = saldo;
celda = fila.insertCell(-1);
var opciones = document.createElement('select');
opciones.name = datos.rows[i].id;
opciones.id = datos.rows[i].id;
opciones.onchange = ejecutarAccion;
celda.appendChild(opciones);
for(j=0;j<3;j++){
var opcion = document.createElement('option');
opcion.appendChild(document.createTextNode(miArray[j]));
opciones.appendChild(opcion);
}
}
document.getElementById('n_fila').style.display='b lock';
delete datos;
}
}[/HIGHLIGHT]

He probado con var datos = conexion.responseText.parseJSON() y tampoco me funciona.

¿Alguna solución?

Gracias de antemano.
  #2 (permalink)  
Antiguo 12/06/2012, 05:37
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: JSON php

amigo, prueba con ob_flush();
  #3 (permalink)  
Antiguo 12/06/2012, 05:57
 
Fecha de Ingreso: abril-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 1
Respuesta: JSON php

Y como lo pruebo? Esa función no es para mostrar lo que saca del archivo php? Eso lo puedo hacer con el alert(conexion.responseText); no?
  #4 (permalink)  
Antiguo 12/06/2012, 06:44
 
Fecha de Ingreso: abril-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 1
Respuesta: JSON php

He seguido investigando y creo que es problema a la hora de crear Ajax, por que es como si no actualizara.

Creo la conexión así:

Código Javascript:
Ver original
  1. function crearXMLHttpRequest(){
  2.     var xmlHttp = null;
  3.     if(window.ActiveXObject){
  4.         //primer alert alert(xmlHttp);
  5.         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  6.         //segundo alert alert(xmlHttp);
  7.     }else{
  8.         if(window.XMLHttpRequest){
  9.             xmlHttp = new XMLHttpRequest();
  10.         }
  11.     }
  12.     // tercer alert alert(xmlHttp);
  13.     return xmlHttp;
  14. }

Los alert los he puesto para comprobación, pues bien, si ejecuto la web en cualquier navegador que no sea IE me salta el tercer alert, sin embargo si ejecuto en IE9 se me queda pillado en el segundo alter, pero si comento los alert (tal y como están aquí) me muestra la tabla pero luego no actualiza cuando el usuario modifique alguna fila.
  #5 (permalink)  
Antiguo 12/06/2012, 07:21
 
Fecha de Ingreso: abril-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 1
Respuesta: JSON php

Ya lo solucioné, era un problema de la caché, hay que poner la siguiente cabecera en los archivos php:
header("Cache-Control: no-store, no-cache, must-revalidate");

Etiquetas: html, json, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.