2012-12-06 4 views
5

Ich habe eine Seite namens search.jsp. Wenn der Benutzer einen Datensatz auswählt und die Bearbeitungsschaltfläche drückt, möchte ich eine neue Seite (im selben Fenster) mit den Datensatzdaten öffnen (die in einem JSON-Objekt gespeichert sind und an die neue Seite übergeben werden). Wie verwende ich Javascript (oder jQuery), um eine neue Seite zu öffnen und die JSON-Daten weiterzuleiten?JavaScript - Wie öffne ich eine neue Seite und gebe JSON-Daten an sie weiter?

+0

Vielen Dank an alle für die Antworten . Die Seiten befinden sich in derselben Domain. Ich entschuldige mich, dass ich das nicht in den ursprünglichen Beitrag aufgenommen habe. – James

Antwort

1

Wenn die beiden Seiten auf der gleichen Domäne sind, einen dritten Weg HTML5 local zu verwenden ist. Der Umgang mit GET-Parametern oder Fenster-/Dokument-JS-Referenzen ist nicht sehr portabel (auch wenn ich weiß, dass alle Browser localStorage nicht unterstützen).

+1

Ich dachte, lokaler Speicher wurde durch Domain irgendwie begrenzt (obwohl ich mich nicht an die Details erinnere)? Schließlich würden Sie nicht wollen, dass bos.net.website.com auf die localStorage zugreift, die von your.bank.com richtig eingestellt wurde? – machineghost

+0

Sie haben völlig Recht. Die Frage wurde so gestellt, dass ich dachte, die beiden Seiten würden sich auf derselben Domain befinden. Bearbeitete die Antwort mit der Präzision. Und ich fand die anderen Lösungen ein bisschen hässlich .. – Ulflander

+1

Ja; Beide Seiten befinden sich auf derselben Domain, daher wird dies gut funktionieren. Ich muss nur vorsichtig sein, Speicher nach dem Gebrauch zu löschen. – James

2

die beiden Seiten sind auf der gleichen Domain Unter der Annahme, können Sie das zurückgegebene Objekt von window.open(), um Zugang (und bearbeiten), um das Fenster-Objekt eines neu geöffneten Fenster erstellt wurden.

+0

Ich muss die neue Seite im selben Fenster behalten (d. H. Window.open ('edit.jsp', '_self')) Wie kann ich das Fensterobjekt der Bearbeitungsseite von der Suchseite aus bearbeiten, wenn die Suchseite nicht mehr existiert? – James

+0

können Sie Code-Schnipsel bereitstellen, die mehr Ihre Antwort beschreiben können – dom

1

Wenn der JSON klein genug ist, können Sie ihn einfach als GET-Parameter in die URL aufnehmen, wenn Sie das neue Fenster öffnen.

Etwas wie: http://diveintohtml5.info/storage.html

In der Tat genau für local, was Sie wollen bestimmt ist:

window.open(yourUrl + '?json=' + serializedJson) 
+0

Aber ich mag Jacks Antwort besser; Keine JSON-Längenbeschränkungen und kein großes Durcheinander von JSON in der URL, die der Benutzer sehen kann. – machineghost

+0

Ich habe kürzlich in dieser Aussage gelandet, "wenn JSON klein genug ist" Wie klein ist klein genug und was sind die Grenzen beteiligt? – Jay

+1

http://stackoverflow.com/questions/2659952/maximum-length-of-http-get-request – machineghost

1

Hmm, zum Beispiel, haben Sie Objekt

var dataObject = { 
    param : 'param', 
    param2 : 'param2' 
}; 

Sie können es in Zeichenfolge übersetzen, JSON.stringify Methode

var dataObjectString = JSON.stringify(dataObject); 

Dann sollten Sie Base64-Codierung verwenden Sie Daten zu kodieren (base64 kodieren/decodieren Methoden können in den Suchmaschinen leicht gefunden werden)

var dataObjectBase64 = base64encode(dataObjectString); 

Sie erhalten so etwas wie dies

e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307 

Dann können Sie diese Zeichenfolge als Parameter übergeben:

iframe src="http://page.com/?data=e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307" 

Schließlich Reverse Aktionen auf der geladenen Seite.

2

Sie können „on the fly“ eine Form mit einem versteckten/Texteingabewert schaffen dies den json Wert hält, dann können Sie dieses Formular über Javascript einreichen.

So etwas ...

Im mit JQUERY und Unterstrichen (für Vorlage Zweck)

dies die Vorlage

<form method='<%= method %>' action="<%= action %>" name="<%= name %>" id="<%= id %>" target="_blank"> 
    <input type='hidden' name='json' id='<%= valueId %>' /> 
</form> 

Sie dann Post verwenden Javascript kann, ist

function makePost(){ 
    var _t = _.template("use the template here");    
    var o = { 
      method : "POST", 
      action :"someurl.php", 
      name : "_virtual_form", 
      id : "_virtual_form_id", 
      valueId : "_virtual_value" 
     } 

    var form = _t(o); //cast the object on the template 
      //you can append the form into a element or do it in memory     
    $(".warp").append(form);   

      //stringify you json   
     $("#_virtual_value").val(JSON.stringify(json)); 
     $("#_virtual_form_id").submit(); 
     $("#_virtual_form_id").remove();       
} 

jetzt tun Sie Sie müssen sich keine Sorgen über die Länge von Ihnen json oder wie viele Variablen zu senden.

am besten!

+0

Danke für die Antwort. Ich glaube, dass die lokale Speicherlösung (von Ulllander vorgeschlagen) etwas einfacher ist, da beide Seiten auf derselben Domain sind. – James

+0

Nun, das ist eine Crossbrowser-Lösung, während Ulflander nicht, aber Sie richtig, seine Antwort ist viel einfacher, weil nur die Vorteile der neuen Funktionen in HTML5 nutzen. Und natürlich, wie Sie sagen, kann diese Lösung Ihnen helfen, wenn Ihre Seiten in verschiedenen Domänen sind. Beste ... – ncubica

0

Hier einige sehr einfache reine JavaScript (kein HTML, keine jQuery), die ein Objekt zu JSON konvertiert und legt es auf eine andere Seite:

/* 
    submit JSON as 'post' to a new page 
    Parameters: 
    path  (URL) path to the new page 
    data  (obj) object to be converted to JSON and passed 
    postName (str) name of the POST parameter to send the JSON 
*/ 
function submitJSON(path, data, postName) { 
    // convert data to JSON 
    var dataJSON = JSON.stringify(data); 

    // create the form 
    var form = document.createElement('form'); 
    form.setAttribute('method', 'post'); 
    form.setAttribute('action', path); 

    // create hidden input containing JSON and add to form 
    var hiddenField = document.createElement("input"); 
    hiddenField.setAttribute("type", "hidden"); 
    hiddenField.setAttribute("name", postName); 
    hiddenField.setAttribute("value", dataJSON); 
    form.appendChild(hiddenField); 

    // add form to body and submit 
    document.body.appendChild(form); 
    form.submit(); 
} 

einige PHP, wie dies auf der Zielseite Verwenden Sie die JSON zu erhalten :

$postVarsJSON = $_POST['myPostName']; 
$postVars = json_decode($postVarsJSON); 

oder einfacher für JavaScript:

var postVars = JSON.parse(<?php $_POST['myPostName']; ?>); 
Verwandte Themen