2010-03-26 12 views
7

Para la opción dataType de la función JQuery.AJAX, no veo byte array o blob como una de las posibilidades.JQuery.AJAX: ¿puede mi servidor devolver una cantidad de datos?

¿Cómo puedo obtenerlo para que mi servidor pueda devolver una matriz de bytes como resultado de una llamada AJAX?

Podría convertir el blob en texto, pero voy por la compacidad.

EDITAR: El blob no se mostrará al usuario. Mi javascript lo verá y creará un objeto a partir de él. Se trata de un blob de 50 kb, y la velocidad es importante, por lo que no quiero agregar ningún tipo de hinchazón si no es necesario.

EDIT: Mi de datos es una matriz de enteros. La codificación de Base64 es una posibilidad, pero preferiría no agregar hinchazón. Si no hay una manera de hacer esto, creo que solo lo codificaría Base64.

+0

es probable que necesite usar PHP o ASP para 'enmascarar' los datos binarios en un archivo de texto normal que su Javascript decodifica a continuación. – thecoshman

+1

¿Estás seguro de que quieres hacer esto? ¿No es mejor utilizar un id del blob (si está en la base de datos) y luego servir el archivo al usuario de que haga clic en él, o procesar los bytes a través de otros medios cuando el id esté disponible? –

+0

@Shervin Quiero manipular el blob y crear un objeto fuera de él una vez recuperado. No se mostrará al usuario. – Kyle

Respuesta

3

EDIT: En base a la discusión de comentarios, me gustaría revisar mi respuesta. Si está pasando una matriz de enteros, y puede obtenerlo en ese formato en su lado del servidor, desde allí, debe convertirlo absolutamente en JSON. JSON admite pasar enteros, jQuery admite fácilmente obtener JSON.

JSON Muestra para una matriz de enteros:

{ 
"array": [0, 1, 2, 3, 4, 5] 
} 

Muestra de código Javascript/jQuery para recuperar que JSON:

$.getJSON('/url/to/binary/data/returning/json', 
    function(data) { 
     // access the array this way: 
     var array = data.array; 
     var first = array[0]; 
     // so here you can do whatever your code needs with that array 
    } 
); 

Sugerencias viejos

Aunque estoy de acuerdo con los comentaristas arriba, creo que debería ser posible hacer esto. Hay un codificador/decodificador base64 jQuery plugin que debería ayudar a transferir sus datos. (Causando un poco de bloat, es verdad). Si base64 codifica su matriz, debería poder transferirla.

Si solo desea descargar datos binarios (no mostrarlos), establezca el tipo MIME de su respuesta a application/octet-stream y proporcione un nombre de archivo adjunto para el manejo apropiado del navegador.

$.get('/url/to/binary/data', 
    function(data) { 
     // convert binary data to whatever format you would like to use here with 
     // an encoded string, have the browser download, call 
     // a helper function, etc. 
    } 
); 

Es posible que desee considerar la búsqueda de otros formatos que más a menudo se transfieren a través de HTTP (o utilizando otro protocolo de transporte si es necesario), sin embargo, dependiendo de lo que está tratando de hacer.

+0

Podría dar un ejemplo de configuración del tipo MIME a 'application.octet-stream'. – thecoshman

+0

Entonces, si configuro el tipo MIME en application/octet-stream, ¿la variable 'data' en su fragmento de código lo contendría? ¿La variable 'data' sería de tipo array de bytes? – Kyle

+0

@thecoshman - Han pasado años desde que usé PHP, por lo que no estoy seguro de cómo configurar los encabezados HTTP desde el servidor en PHP. Parece que una búsqueda en Google proporciona sugerencias para explicar el manual de PHP. – justkt

Cuestiones relacionadas