2010-03-26 13 views
7

Für die dataType-Option für die JQuery.AJAX-Funktion, sehe ich nicht Byte-Array oder Blob als eine der Möglichkeiten.JQuery.AJAX - Kann mein Server einen Datenblock zurückgeben?

Wie kann ich es bekommen, damit mein Server ein Byte-Array als Ergebnis eines AJAX-Aufrufs zurückgeben kann?

Ich könnte den Blob in Text konvertieren, aber ich bin für die Kompaktheit.

EDIT: Der Blob wird dem Benutzer nicht angezeigt. Mein Javascript wird es betrachten und daraus ein Objekt erstellen. Es handelt sich um einen 50kb-Blob, und Geschwindigkeit ist wichtig, also möchte ich keine Blähungen hinzufügen, wenn ich es nicht muss.

EDIT: Meine Daten sind ein Array von ganzen Zahlen. Base64-Codierung ist eine Möglichkeit, aber ich würde lieber Blähton hinzufügen. Wenn es keine Möglichkeit gibt, dies zu tun, würde ich es wahrscheinlich nur Base64 kodieren.

+0

Sie werden wahrscheinlich PHP oder ASP verwenden müssen, um Ihre Binärdaten in eine normale Textdatei zu "maskieren", die Ihr Javascript dann dekodiert. – thecoshman

+1

Möchten Sie das wirklich tun? Ist es nicht besser, eine ID des Blobs zu verwenden (wenn es in der Datenbank ist) und dann die Datei dem Benutzer zuzustellen, auf den sie klicken, oder die Bytes auf andere Weise zu rendern, wenn die ID verfügbar ist? –

+0

@Shervin Ich möchte den Blob manipulieren und ein Objekt daraus erstellen, sobald es abgerufen wurde. Es wird dem Benutzer nicht angezeigt. – Kyle

Antwort

3

BEARBEITEN: Basierend auf Kommentardiskussion möchte ich meine Antwort revidieren. Wenn Sie ein Array von Ganzzahlen übergeben und es auf der Serverseite in dieses Format bringen können, sollten Sie es unbedingt in JSON umwandeln. JSON unterstützt das Übergeben von Ganzzahlen, jQuery unterstützt einfach das Abrufen von JSON.

Beispiel JSON für ein Array von ints:

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

Beispiel Javascript/jQuery-Code für das Abrufen, dass 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 
    } 
); 

Old Vorschläge

Während ich mit den commen zustimmen oben, glaube ich, dass es möglich sein sollte, dies zu tun. Es gibt einen Base64-Encoder/Decoder jQuery plugin, der bei der Übertragung Ihrer Daten helfen sollte. (Verursacht ein bisschen bloat, es ist wahr). Wenn Sie Ihr Array mit Base64 kodieren, sollten Sie es übertragen können.

Wenn Sie nur Binärdaten herunterladen (nicht anzeigen) möchten, dann stellen Sie den MIME-Typ Ihrer Antwort auf application/octet-stream ein und geben Sie einen Anhangnamen für die entsprechende Browserbehandlung ein.

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

Sie können in anderen Formaten suchen zu prüfen, die über HTTP (oder mit einem anderen Transportprotokoll, falls erforderlich), obwohl häufiger übertragen werden, je nachdem, was Sie zu tun versuchen.

+0

Können Sie ein Beispiel für die Einstellung des MIME-Typs auf 'application.octet-stream' geben. – thecoshman

+0

Also, wenn ich den MIME-Typ zu application/octet-stream, dann würde die 'data' Variable in Ihrem Code-Snippet es enthalten? Würde die Variable 'data' vom Typ Byte-Array sein? – Kyle

+0

@thecoshman - Es ist Jahre her, dass ich PHP benutzt habe, also weiß ich nicht genau, wie ich HTTP-Header vom Server in PHP einrichten soll. Sieht so aus, als ob eine Google-Suche Hinweise auf das PHP-Handbuch zur Verfügung stellt. – justkt