2009-03-23 13 views
7

¿Es posible (y compatible con varios navegadores) incrustar una imagen en el XML de una respuesta AJAX, y luego cargar esa imagen usando JavaScript?Incrustar una imagen en una respuesta AJAX

Tengo un sistema que hace algunos cálculos en función del número de sesiones que se ejecutan a través de él. Los resultados se grafican y devuelven en dos partes:

1) XML que contiene información sobre el gráfico, los totales y los datos del mapa de la imagen que permite al usuario hacer clic en las áreas relevantes.

2) La imagen del gráfico.

Como los datos pueden cambiar entre las dos solicitudes (y podría ser costoso de calcular), preferiría hacerlo en una sola solicitud (devolver la imagen con el XML). La implementación actual almacena en caché las estadísticas por un período pequeño para que los resultados de las solicitudes múltiples coincidan. Como la cantidad de datos que debe almacenarse en caché va a aumentar (de ~ 2.5K a ~ 1.2MB), me gustaría probar un método alternativo.

NOTA: No quiero utilizar imágenes PNG b64 en línea ya que no son compatibles con IE.

+0

Buena pregunta. Espero que alguien sepa cómo hacerlo, pero soy pesimista. – erikkallen

Respuesta

3

Como esto parece más trabajo que vale la pena, he decidido que una solución más simple sería:

1) Enviar datos XML al cliente con los detalles de lo que va a representar gráficamente.

2) El cliente envía una solicitud de la imagen, incluidos los datos a un gráfico (similar a la API Google Chart).

Esto desacopla la representación gráfica de los datos, y luego puede usarse en el futuro para generar gráficos genéricos para otros conjuntos de datos. El otro beneficio es que no requiere ningún lado del servidor de almacenamiento en caché, ya que solo se utiliza 1 solicitud.

3

¿No puede almacenar la imagen en el servidor y enviar la URL al cliente?

+0

Está tratando de evitar esa ruta, ya que el tamaño de las imágenes en caché está a punto de saltar. –

+0

Esa es una opción, pero me gustaría evitar el código para gestionar archivos. – jthompson

0

Si el almacenamiento no es una opción. Cree una imagen en la memoria y vacíe los datos de la imagen binaria a la respuesta de un script, como un archivo php. Simplemente use el encabezado correcto:

Content-type: image/png 

La imagen se regenera todo el tiempo.

Para estar absolutamente seguro de que la imagen no se almacena en caché, añada un parámetro aleatorio a la cadena de consulta.

+0

La imagen ya está creada en la memoria y se envía de esa manera. Lo que intento lograr es incluir algunos datos XML con la imagen. – jthompson

+0

Hm Ya veo, si base64 no es una opción, no veo una solución ... –

0

Puede devolver la imagen al ajax-client y luego incluir los datos XML en un encabezado X-HTTP para la imagen.

Pero necesita averiguar si es posible leer el X-header del ajax-client.

2

Es posible que desee comprobar esto link para ver si este concepto funcionará. Este link puede ser útil.

Creo que sería interesante intentar combinar ambos conjuntos de datos en el XML.

1

Bueno actually you can pero probablemente no va a valer la pena.Parece que un método basado en vectores como canvas y VML alternatives for IE sería una mejor alternativa para renderizar gráficos. Entonces solo tiene que pasar los datos del gráfico al navegador.

Cuestiones relacionadas