2016-08-05 22 views
2

Gibt es eine Möglichkeit, eine dynamisch serverseitig generierte Datei, die aus einer Ajax-Post-Struktur abgerufen wurde zurückgeben?Ajax Post mit einer Datei zurückgeben

Schreiben eines kleinen Web-MVC-Projekts, das eine Liste von Daten generiert (die Daten werden aus einer komplexen Aggregationsabfrage generiert und können nicht von ID oder anderen aufgerufen werden) und kommen zu dem Teil, an dem ich einige exportieren möchte ausgewählte Teile zu einer Datei und laden Sie sie herunter.

Wie funktioniert es: 1. Auf der Seite i einige Felder mit Schlüsseldaten auswählen (mit JQuery Datatable) 2. es an einen Controller (Frühjahr um genau zu sein) 3. ein Bytestrom generieren und senden Sie es als HTTPResponse mit "Content-disposition", "attachment" -Header.

Das ist, dass ich die Zeilen auswählen und die benötigten Daten mit JQuery-> Ajax bilden, so bleibt das Ergebnis des Controllers-> Post im Javascript-Teil und gibt mir kein "Speichern unter ...".

Ich denke schon an ein temporäres Verzeichnis oder etwas, aber die Option für die letzte speichern.

+0

Leider Nein .... –

+0

Aber kann ich irgendwie eine Nicht-Ajax-Post, die ein neues Tab \ Fenster öffnen sollte und erhalten eine normale Antwort Server, die direkt die Datei erhalten? –

+0

offensichtlich .. Sie können Formular ... wenn Inhalt downloadbare Datei ist dann Popup für downlaod oder Auto-Download starten, ohne Ihre aktuelle Seite zu verlieren. –

Antwort

1

Leider können Sie Datei nicht über Ajax erhalten, aber Sie können es erreichen, indem Sie dynamisch Formular generieren und senden. Laut unserer Kommentardiskussion für generate form und submit können Sie so etwas tun.

function autoSubmitForm(method, url, post_data) { 
    var element = document.getElementById("virtual_form"); 
    if(element != null) 
    { 
     element.parentNode.removeChild(element); 
    } 
    var form = document.createElement("form"); 
    form.setAttribute("id", "virtual_form"); 
    form.setAttribute("style", "display:none;"); 
    form.method = method; 
    form.action = url; 
    for(i in post_data) 
    { 
     var element=document.createElement("input"); 
     element.value=post_data[i]; 
     element.name=i; 
     form.appendChild(element); 
    } 
    document.body.appendChild(form); 
    form.submit(); 

} 

autoSubmitForm('POST','your_url.php',{id:"xyz",other_input:"input value"}); 

Hier ist {id:"xyz",other_input:"input value"} Objekt von Post-Daten Sie paaren sich dynamisch von Feldnamen und den Wert des Feldes definieren. Übergeben Sie es in Funktion.

+0

Danke. Ich werde das jetzt ausprobieren –

+0

habe ich inzwischen aus meinem Code bearbeitet. :) also bitte überprüfen Sie meine Änderungen –

+0

Sie ignorieren die Methode und URL-Argumente in Ihrer Funktion ... –