2010-03-26 15 views
7

Per l'opzione dataType per la funzione JQuery.AJAX, non vedo array di byte o blob come una delle possibilità.JQuery.AJAX: il mio server può restituire un blob di dati?

Come posso ottenerlo in modo che il mio server possa restituire un array di byte come risultato di una chiamata AJAX?

Potrei convertire il blob in testo, ma ho intenzione di compattezza.

MODIFICA: il blob non verrà mostrato all'utente. Il mio javascript lo guarderà e creerà un oggetto fuori da esso. Si tratta di un blob di 50kb, e la velocità è importante, quindi non voglio aggiungere alcun rigonfiamento se non dovessi.

MODIFICA: i miei dati sono un array di numeri interi. La codifica Base64 è una possibilità, ma preferirei non aggiungerla. Se non c'è un modo per farlo, suppongo che baserei solo Base64 per codificarlo.

+0

Probabilmente avrai bisogno di usare PHP o ASP per "mascherare" i tuoi dati binari in un normale file di testo che poi il tuo javascript decodifica. – thecoshman

+1

Sei sicuro di voler fare questo? Non è meglio usare un id del blob (se è nel database) e poi servire il file all'utente che fa clic su di esso, o renderizzare i byte con altri mezzi quando l'id è disponibile? –

+0

@Shervin Voglio manipolare il blob e creare un oggetto fuori da esso una volta recuperato. Non verrà mostrato all'utente. – Kyle

risposta

3

MODIFICA: in base alla discussione dei commenti, vorrei rivedere la mia risposta. Se stai passando un array di numeri interi e puoi farlo in quel formato sul lato server, da lì devi assolutamente trasformarlo in JSON. JSON supporta il passaggio di interi, jQuery supporta facilmente il recupero di JSON.

JSON di esempio per un array di int:

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

Campione codice Javascript/jQuery per il recupero che 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 
    } 
); 

Vecchi Suggerimenti

Mentre sono d'accordo con i commentatori sopra, credo che dovrebbe essere possibile farlo. C'è un codificatore/decodificatore base64 jQuery plugin che dovrebbe aiutare nel trasferimento dei dati. (Causando un po 'di bloat, è vero). Se basi64 codifichi la tua matrice, dovresti riuscire a trasferirla.

Se si desidera solo scaricare dati binari (non visualizzarli), impostare il tipo MIME della risposta a application/octet-stream e fornire un nome di allegato per la gestione del browser appropriata.

$.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. 
    } 
); 

Si può prendere in considerazione, cercando in altri formati che sono più spesso trasferiti tramite HTTP (o utilizzando un altro protocollo di trasporto se necessario), anche se, a seconda di ciò che si sta cercando di fare.

+0

Puoi dare un esempio di impostazione del tipo MIME su 'application.octet-stream'. – thecoshman

+0

Quindi, se imposto il tipo MIME su application/octet-stream, la variabile 'data' nel tuo snippet di codice dovrebbe contenerla? La variabile 'data' sarebbe di tipo byte array? – Kyle

+0

@thecoshman - Sono passati anni da quando ho usato PHP, quindi non sono sicuro di come configurare le intestazioni HTTP dal server in PHP. Sembra che una ricerca su Google fornisca indicazioni per il manuale PHP da spiegare. – justkt

Problemi correlati