Grid + Json + Ajax
Hola, comento una cuestion interesante, digo interesante porque no he encontrado todavia la solucion y a lo mejor a alguno de vosotros se le ocurre. Mi proyecto tiene que ver con un GIS, para lo que uso OpenLayers y extjs 3.3.1 para hacer la web. Mediante form hago una consulta en PHP que genera un Json que envio a un grid, para esto uso AJAX para que no se me recarge la pagina. Si como viene en el ejemplo de GeoExt hago una salida a fichero y lo cargo funciona sin problema. El problema es si quiero hacer una carga dinamica de los datos, para evitar que se me machaquen los datos. Pense en pasar via GET los paramentros de cada variable en una cookie, cosa que hace sin problema segun veo en la cabecera del Firebug me actualiza la cookie, pero en los parametros la url sigue manteniendo la consulta anterior. He probado varios metodos pero no llego a nada. os pongo la definicion del store y del grid:
store = new GeoExt.data.FeatureStore({
layer: vecLayer,
fields: [
{name: 'a_code', type:'string'},
{name: 'shooting_time', type: 'string'},
{name: 'total_discarded_weight', type: 'double'}
],
proxy: new GeoExt.data.ProtocolProxy({
protocol: new OpenLayers.Protocol.HTTP({
method:'GET',
url: "consulta3.php?date1="+ReadCookie('date1')+"&date2="+ReadCookie('date2')+"&especies="+escape(ReadCookie('especies')),
format: new OpenLayers.Format.GeoJSON()
})
})
});
gridPanel = new Ext.grid.GridPanel({
title: "Información de Capturas",
region: "south",
border: true,
collapsible: true,
collapsed:true,
collapseMode: "mini",
store: store,
stateful: true,
width:320,
height:400,
boxMinHeight: 450,
autoScroll: true,
split:true,
columns: [{
header: "COD",
width: 35,
sortable: true,
dataIndex: "a_code"
},{...}],
stripeRows: true,
sm: new GeoExt.grid.FeatureSelectionModel()
});
esa url que envio por GET pasa la cookie, pero como decia antes, los parametros son de la anterior consulta y por consiguiente no actualiza el grid.
El script ajax es el siguiente, en el meto el load del store.
var xmlhttp;
function xhr(formulario){
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = procesarRespuesta; //Ojo sin parentesis
xmlhttp.open("POST", "consulta2.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Cache-control", "no-cache");
xmlhttp.send(formulario);
}
function procesarRespuesta(){
if(xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
store.load();
}
}
}
quizas sea una cuestion de cache, de ahi que pusiera el no-cache ¡pero tampoco es eso! :-(
help pleeeease.
Gracias
Hi.. No te conviene pasar las variables para actualizar el Grid por la URL...
si estas utilizando cookies... captura directamente los valores de la Cookie en tu PHP mediante :
$mydato = $_COOKIE['mycookie'];
..aunque no es una buena practica porque el uso de Cookies puede ser detectado por usuarios e intrusos.
también puedes utilizar la propiedad baseParams del datastore :
baseParams:{myvar: "mydato"},
y capturar el valor de "myvar" en tu PHP con el metodo POST mediante :
$mydato = '';
if ( isset($_POST['myvar'])){
$mydato = $_POST['myvar'];
}
es una mejor practica...
saludos
@Mlayns
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.