Wie bekomme ich browser, Benutzer auffordern, eine Datei zu speichern, die dynamisch generiert server?

Clients senden post-Anfragen mit jquery-ajax, wie unten dargestellt:

$.ajax({
    url: "/xxx?request1", 
    data: theParams,
    type: 'post',
    error: function(XMLHttpRequest, textStatus, errorThrown){
        //error handling
    },
    success: function(data){
    var theResult = JSON.parse(data);
        //success handling
    }
});

Apache ist konfiguriert, um die pass-Anforderungen mit /xxx? um eine benutzerdefinierte app. Die app verarbeitet die Anfrage und gibt Informationen. In der Regel werden diese Informationen als JSoN zurückgegeben und angezeigt wird, in der "Erfolg der Behandlung" Abschnitt, mit jquery/javascript. Die app schreibt die folgenden überschriften (die dann wieder über apache) vor dem schreiben der JSON:

HTTP/1.0 200 OK
Connection: close
Server: MyServer v. 0.826
Content-Type: text/html

Ich habe auch cookies arbeiten, indem Sie den folgenden direkt nach der 200 OK-Zeile:

Set-Cookie: cookie_name=value; Domain=example.com; Path=/; Expires=Fri, 21-Mar-2014 01:40:22 GMT; HttpOnly

In einem Szenario, ich möchte die Benutzer in der Lage sein, speichern Sie die zurückgegebenen Daten (als Reine Textdatei). Aber hier ist, wo ich auf Probleme stoßen.

Wenn ich mit JavaScript ein Fenster öffnen und schreiben der Daten in das neue Fenster, ich habe festgestellt, dass Safari und Chrome, beide deaktivieren Sie die "Speichern unter..." - Menü-option (auf Macs).

(Ich habe eine version arbeiten mithilfe der base64-URI, aber das sieht unfertig im Vergleich zum rest der Website).

Begann ich nun zu versuchen, um eine Content-Disposition: attachment; filename=file.txt
header, aber ich konnte nie den browser zu produzieren, der ein prompt. Ich habe versucht, indem Sie diesen header direkt nach der 200 OK-Leitung sowie später:

Content-Type: text/plain
Content-Disposition: attachment; filename=file.txt

Zudem nicht sicher das genaue format der Content-Disposition header, ich bin auch nicht sicher, ob ich die Content-Type korrigieren, oder wenn es etwas, das in der ajax-handler-code, der verhindert, dass das sparen.

Ich habe versucht, Beispiele zu finden, wo alles zusammen, kann aber nur finden, teilen und, klar, ich kann es nicht wieder zusammen richtig. Irgendwelche Vorschläge?

Ich bin targeting nur moderne Browser, die drei großen Plattformen (Windows/Mac/Linux), und nur HTML5/JavaScript auf der client-Seite.

InformationsquelleAutor RPW | 2013-12-21

Schreibe einen Kommentar