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?
Antwort
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).
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
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
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
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.
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
können Sie Code-Schnipsel bereitstellen, die mehr Ihre Antwort beschreiben können – dom
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)
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
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
http://stackoverflow.com/questions/2659952/maximum-length-of-http-get-request – machineghost
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.
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!
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
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
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']; ?>);
- 1. Wie gebe ich Cookies an eine CURL-Weiterleitung weiter?
- 2. Wie gebe ich die Post-ID von der URL an eine andere Seite weiter?
- 3. Wie öffne ich eine neue HTML-Seite mit jQuery?
- 4. Wie gebe ich Ruby-Argumente an Pry-Rescue weiter?
- 5. Wie gebe ich Parameter an einen Provider mit Guice weiter?
- 6. Wie gebe ich ein Passwort an pg_dump weiter?
- 7. Wie gebe ich POST-Informationen mithilfe von Nodejs an die nächste gerenderte Seite weiter?
- 8. Wie gebe ich Daten zwischen Threads weiter?
- 9. Wie öffne ich eine neue Registerkarte bei Klick auf Rails?
- 10. Wie öffne ich eine neue Ansicht und töte die aktuelle?
- 11. Wie navigiere ich von einer XAML-Seite zu einer anderen und gebe Werte weiter?
- 12. Wie öffne ich eine neue Registerkarte in CasperJS
- 13. Wie gebe ich Daten von meinem ViewController an eine Containeransicht weiter?
- 14. Wie gebe ich vom Benutzer eingegebene Werte an eine dynamische URL weiter?
- 15. Wie gebe ich den ID-Teil der URL an eine view_callable weiter?
- 16. Wie gebe ich zitierte Parameter an PowerShell Invoke-Command und ScripBlocks weiter
- 17. Wie öffne Popup-Fenster, Javascript
- 18. FragmentTabHost & Fragments - Wie gebe ich Daten zwischen Tabs weiter?
- 19. Wie gebe ich eine neue Struktur von Option :: unwrap_or zurück?
- 20. Wie öffne ich einige Inhalte vor der Seite laden JavaScript
- 21. VIM: Wie öffne ich eine neue Datei im aktuellen Puffer?
- 22. Wie gebe ich Daten von Ember Power Select weiter?
- 23. Wie öffne ich eine neue Visual Studio-Instanz mit EnvDTE?
- 24. Wie öffne ich eine neue Seite nach einer erfolgreichen Anmeldung? GWT Java
- 25. Wie gebe ich Eingabe- und Ausgabedatentypen in Python-Kommentaren an?
- 26. Wie öffne ich eine Verknüpfung neue Registerkarte mit Druckbefehl?
- 27. Wie gebe ich ## getrennte Werte in Scala weiter?
- 28. Wie gebe ich zusätzliche Informationen an ActionMailer weiter, um eingehende Nachrichten zu bearbeiten?
- 29. Wie öffne ich eine Seite mit dem Titel in PHP?
- 30. Wie gebe ich das Sternchen '*' in bash als Argumente an mein C-Programm weiter?
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