Ho una pagina chiamata search.jsp. Quando l'utente seleziona un record e preme un pulsante di modifica, vorrei aprire una nuova pagina (nella stessa finestra) con i dati del record (che è memorizzata in un oggetto JSON e passata alla nuova pagina). Come posso usare Javascript (o jQuery) per aprire una nuova pagina e passare i dati JSON?JavaScript: come si apre una nuova pagina e si passano i dati JSON?
risposta
Se le due pagine sono sullo stesso dominio, un terzo modo è quello di utilizzare HTML5 localStorage: http://diveintohtml5.info/storage.html
Infatti localStorage è appunto inteso per ciò che si vuole. Gestire i parametri GET o i riferimenti JS di finestre/documenti non è molto portabile (anche se, lo so, tutti i browser non supportano localStorage).
Ho pensato che la memoria locale fosse limitata dal dominio in qualche modo (anche se non ricordo i dettagli)? Dopotutto, non vorrete che malevolo.website.com acceda al localStorage impostato da your.bank.com giusto? – machineghost
Hai perfettamente ragione. La domanda è stata posta in un modo in cui pensavo che le due pagine fossero sullo stesso dominio. Modificato la risposta con la precisione. E ho trovato le altre soluzioni un po 'brutte .. – Ulflander
Sì; entrambe le pagine sono sullo stesso dominio, quindi funzionerà bene. Devo solo fare attenzione a svuotare la memoria dopo l'uso. – James
Supponendo che le due pagine si trovino nello stesso dominio, è possibile utilizzare l'oggetto restituito creato da window.open() per accedere (e modificare) l'oggetto finestra di una finestra appena aperta.
Devo mantenere la nuova pagina nella stessa finestra (ad es. Window.open ('edit.jsp', '_self')) Come posso manipolare l'oggetto finestra della pagina di modifica dalla pagina di ricerca quando la pagina di ricerca non esiste più? – James
puoi fornire uno snippet di codice che può descrivere più la tua risposta – dom
Se il JSON è abbastanza piccolo, è sufficiente includerlo come parametro GET per l'URL quando si apre la nuova finestra.
Qualcosa di simile:
window.open(yourUrl + '?json=' + serializedJson)
Ma la risposta di Jack mi piace di più; nessun limite di lunghezza JSON e nessun pasticcio gigante di JSON nell'URL che l'utente può vedere. – machineghost
Mi sono imbattuto in questa affermazione, "se JSON è abbastanza piccolo" How Small è abbastanza piccolo e quali sono i limiti coinvolti? – Jay
http://stackoverflow.com/questions/2659952/maximum-length-of-http-get-request – machineghost
Hmm, ad esempio, si dispone oggetto
var dataObject = {
param : 'param',
param2 : 'param2'
};
È possibile tradurlo in stringa, utilizzando il metodo JSON.stringify
var dataObjectString = JSON.stringify(dataObject);
Poi si dovrebbe utilizzare la codifica Base64 per codificare i tuoi dati (base64 metodi di codifica/decodifica possono essere easely trovati nei motori di ricerca)
var dataObjectBase64 = base64encode(dataObjectString);
otterrete qualcosa di simile
e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307
Poi si può passare questa stringa come un parametro:
iframe src="http://page.com/?data=e3BhcmFtIDogJ3BhcmFtJyxwYXJhbTIgOiAncGFyYW0yJ307"
Infine, azioni sulla pagina caricata retromarcia.
È possibile creare "al volo" un modulo con un valore di input nascosto/testo che manterrà il valore di json, quindi è possibile inviare questo modulo tramite javascript.
qualcosa di simile ...
Im utilizzando jQuery e underscore (a scopo template)
Questo è il modello
<form method='<%= method %>' action="<%= action %>" name="<%= name %>" id="<%= id %>" target="_blank">
<input type='hidden' name='json' id='<%= valueId %>' />
</form>
si può quindi posta utilizzarlo su javascript
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();
}
ora si fa Non devi preoccuparti della lunghezza di te json o di quante variabili inviare.
meglio!
Grazie per la risposta. Credo che la soluzione di archiviazione locale (proposta da Ulflander) potrebbe essere un po 'più semplice poiché entrambe le pagine si trovano sullo stesso dominio. – James
Beh, questa è una soluzione crossbrowser mentre Ulflander no, ma hai ragione la sua risposta è molto più semplice perché sta solo sfruttando le nuove funzionalità di html5. E naturalmente quando dici che questa soluzione può aiutarti quando le tue pagine sono in domini diversi. meglio ... – ncubica
Ecco alcuni molto semplici JavaScript puro (senza HTML, senza jQuery) che converte un oggetto JSON e lo sottopone ad un'altra pagina:
/*
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();
}
utilizzare alcuni di PHP come questo sulla pagina di destinazione per ottenere il JSON :
$postVarsJSON = $_POST['myPostName'];
$postVars = json_decode($postVarsJSON);
O, più semplicemente per JavaScript:
var postVars = JSON.parse(<?php $_POST['myPostName']; ?>);
- 1. Come si apre una finestra su una nuova discussione?
- 2. Come si apre il collegamento WebView a una nuova attività?
- 3. Come si apre l'immagine appena creata in una nuova scheda?
- 4. jQuery apre la pagina in una nuova scheda mentre passa i dati POST
- 5. Come si passano i dati in un IValueConverter in XAML?
- 6. Come si passano i parametri da xaml?
- 7. Genera report di Crystal in PDF ... Come si apre in una nuova scheda o pagina?
- 8. Google CSE apre in una nuova finestra
- 9. Come si passano le informazioni tra i segues dello storyboard?
- 10. Chrome si apre con "Dati"; con selenio
- 11. Visualizzazione raso a DisplayFor DataType.Url che si apre in una nuova finestra
- 12. Come si apre il link in una nuova scheda su html?
- 13. showModalDialog; Apre una nuova finestra in IE
- 14. Come si inserisce javascript su una pagina su IE 8?
- 15. JavaFX apre una nuova finestra
- 16. Mediawiki apre i link esterni in una nuova finestra
- 17. Come si passano gli argomenti da una funzione a un'altra?
- 18. Apre i collegamenti nelle thread Disqus in una nuova scheda
- 19. Animate Spinner quando si carica una nuova pagina
- 20. Come visualizzare i dati json sulla pagina html usando angularjs?
- 21. Come si passano i dati da un controller a un modello con Ruby on Rails?
- 22. Come si apre una nuova scheda durante la ricerca in Aptana Studio 3?
- 23. window.location() non funziona, non si apre la pagina
- 24. apre la pagina automaticamente usando javascript
- 25. Estensione Chrome: come si apre un collegamento in una nuova scheda?
- 26. Firefox Apre una nuova scheda invece di una finestra pop?
- 27. NERDTree si apre in una nuova scheda, come ultima scheda in gvim?
- 28. GWT pagina aperta in una nuova scheda
- 29. Come si chiude una pagina MVC ASP.NET dal controller?
- 30. Apre una nuova finestra dal POST usando h: commandButton
Grazie a tutti per le risposte . Le pagine sono sullo stesso dominio. Mi scuso per non averlo incluso nel post originale. – James