2013-07-22 22 views
29

Ich habe derzeit einen Code, der eine window.open(urlWithGetParams) Zeile ausführt. Soweit ich weiß, zwingt mich das dazu, eine GET Anfrage zu verwenden. Ich möchte dies mit einer POST-Anfrage machen. Gibt es einen Workaround dafür?So ersetzen Sie window.open (...) durch einen POST

Ich bin nicht verheiratet mit window.open(), entweder. Ich bin offen für jede Alternative, die es mir erlaubt, ein neues Fenster über eine POST-Anfrage statt über ein GET zu erzeugen.

+1

Siehe http://stackoverflow.com/questions/5554896/window-open-post oder http://stackoverflow.com/questions/3951768/window-open-and-pass-parameters-by-post-method -Problem –

+2

Die Operation in dem "Duplikat" wird für mich nicht wirklich funktionieren - ich müsste diese Parameter irgendwie in das neue Fenster bringen, und das würde erfordern, sie über ... zu schicken, was? Eine GET-Anfrage? O_o – corsiKa

Antwort

91

In der Tat habe ich eine kleine "Bibliothek" für das gerade gemacht, offen in POST ein neues Fenster:

// Arguments : 
// verb : 'GET'|'POST' 
// target : an optional opening target (a name, or "_blank"), defaults to "_self" 
open = function(verb, url, data, target) { 
    var form = document.createElement("form"); 
    form.action = url; 
    form.method = verb; 
    form.target = target || "_self"; 
    if (data) { 
    for (var key in data) { 
     var input = document.createElement("textarea"); 
     input.name = key; 
     input.value = typeof data[key] === "object" ? JSON.stringify(data[key]) : data[key]; 
     form.appendChild(input); 
    } 
    } 
    form.style.display = 'none'; 
    document.body.appendChild(form); 
    form.submit(); 
}; 

Beispiel:

open('POST', 'fileServer.jsp', {request: {key:"42", cols:[2, 3, 34]}}); 

in einem neuen Fenster zu öffnen, stellen Sie den Parameter target :

open('POST', someURL, someArgs, 'newwin'); 

oder es ist ein neues Fenster/Tab jedes Mal, um sicherzustellen,

open('POST', someURL, someArgs, '_blank'); 

Offensichtlich sollten Sie es anderen einen Namen als open geben, so dass Sie die vorhandene nicht tun Schatten. Idealerweise sollten Sie es mit einem Namespace versehen.

+0

Ich mag es, und es führt einen Beitrag, aber es öffnet kein neues Fenster (zumindest in IE 9.0.8112.16421 – corsiKa

+0

@ corsiKa Es öffnet ein neues Fenster, wenn Sie den Zielparameter: 'open (' POST ', url, {},' newwin ') ' –

+0

Schön! Ich habe es' var reportWindowName = Math.random(). ToString (36) .substr (2,9); 'gemacht, wenn ich mehrmals darauf klicke , jeder Bericht öffnet sich in einem neuen Fenster (gut, wahrscheinlich :-)) – corsiKa

6

Was ich mache ist, dass ich einen Javascript AJAX Beitrag mache und dann nehme ich den Inhalt, den ich zurückbekomme, in ein neues Fenster.

So etwas wie dies (mit jQuery, aber Sie können jede AJAX-Implementierung verwenden):

$.post(URL, DATA, function(d){ 
    var new_window = window.open(); 
    $(new_window.document.body).append(d); 
}); 
+0

Ich sollte darauf hinweisen, dass ich dies versucht habe und es funktioniert minus eine Sache: etwas über Crystal Reports (was ist, wofür ich das tat) würde die Parameter nicht bestehen. Vielleicht habe ich den Vorschlag auch umgesetzt. – corsiKa

+3

Ich verwende diesen vorgeschlagenen Code in Chrome Version 38 und blockiert durch Popup-Blocker! –

Verwandte Themen