cosa eztraña… subiendo el script de mozilla universe a numerica.cl, lo que funcionaba en localhost ya no lo hacía en el server.
el guess era que el evento cm:data:ready, que es el que llama a la función loadGraph() para cargar el mapa, no se estaba lanzando.
analizando la llamada ajax que debe cargar los datos del gráfico:
jQuery.ajax({ url: org.mozilla.SiteMap.dataUrl, jsonpCallback: 'mapData', //el Objeto devuelto en nuestro PHP dataType: 'jsonp', success: function(data) { org.mozilla.SiteMap.data = org.mozilla.SiteMap.cleanData(data); org.mozilla.SiteMap.$graph.trigger('cm:data:ready'); }, } });
entonces, pensando que había algún error en este request, intenté atajarlo con el traibuto error:
jQuery.ajax({ // ... lo mismo que el anterior error: function(error) { alert(error); //algo así } });
pero para mi sorpresa, tampoco se invocó.
Entonces, me fijé que el método que el tipo de datos no era exactamente json sino jsonp
y que en la especificación >> dice explícitamente:
When data is retrieved from remote servers (which is only possible using the
script
orjsonp
data types), theerror
callbacks and global events will never be fired.
Así es que la tarea es entender un poco que es este jsonp, y cómo utilizarlo en llamadas a servidores remotos.
Momentáneamente, una solución parche es utilizar el evento complete, el cual si se dispara con la llamada remota:
jQuery.ajax({ //lo mismo que antes ... complete: function(jqXHR, textStatus){ if(textStatus=="success"){ data = jQuery.parseJSON(jqXHR.responseText); org.mozilla.SiteMap.data = org.mozilla.SiteMap.cleanData(data); org.mozilla.SiteMap.$graph.trigger('cm:data:ready'); } } });
Como vemos en el XMLHttpRequest, la propiedad responseText es la respuesta, la cual podemos parsear con jQuery.parseJSON para obtener el mismo objeto que obteníamos con el data del evento success.