2010-09-29 16 views
31

Ho uno script che su.DocumentReady invia i dati a un'altra pagina. Quella pagina risponde con un codice HTML incapsulato in un tag div.Jquery post, risposta in nuova finestra

Il mio obiettivo è avere questa risposta post/dati aperti in una nuova finestra.

Eventuali indizi o indizi?

Ecco il frammento che ho creato dal consiglio del Dr. Mille.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
var packslip_id = 35592; 
var po_no = 0018439; 
var box_no = 1; 
    $.post("https://example.com/barcode/generate", { packing_slip: packslip_id, reference: po_no, total_boxes: box_no}, 
    function (data) { 
     alert(data); 
     var win=window.open('about:blank'); 
     with(win.document) 
     { 
      open(); 
      write(data); 
      close(); 
     } 
    }); 
}); 

+2

Usa 'window.open'? – Alec

+0

Penso che tu debba dimenticarlo. Qualsiasi Popup-Blocker bloccherà una nuova finestra senza un'azione utente speciale come i clic. –

+0

Dr Molle, sto usando questo in un ambiente controllato in cui i popup sono abilitati per il mio sito ... – Peter

risposta

52

Utilizzare il write() - Metodo del documento della Popup di mettere il markup ci:

$.post(url, function (data) { 
    var w = window.open('about:blank'); 
    w.document.open(); 
    w.document.write(data); 
    w.document.close(); 
}); 
+0

Penso di usare correttamente quello che stai dicendo ..., ma non apre un popup o non pubblica alcun dato sul server. Ho inserito il nuovo codice nel post originale. – Peter

+1

L'uso sembra corretto. Stai utilizzando un URL assoluto, qual è la ragione? –

+0

L'url si trova su un server separato. L'ho fatto funzionare ora quando lo eseguo sulla mia installazione di mamp locale e usando la funzione di anteprima di "Coda" ... ma quando lo eseguo attraverso il safari, non ci sono dati in arrivo ... Sono molto confuso ora. Grazie per tutto il tuo aiuto finora. – Peter

-4

provare

$.post('urpage.php',{}, 
function(data) { 
window.open('page.php?data=data') 
}); 

e hanno mostrano page.php qualsiasi dato che doveva essere

+0

La pagina che sto postando restituisce l'html che voglio aprire in una nuova finestra ... dovendo inviarlo ad un'altra pagina sembra come farlo due volte ... – Peter

+0

avere la pagina che stai inviando, basta inviare i dati. altrimenti non sono sicuro che tu possa passare html a window.open, una ricerca di google ti dirà velocemente se è possibile. – Ascherer

3

Se non avete bisogno di un feedback circa i dati richiesti e anche non avete bisogno di alcuna interattività tra l'apertura e la pop-up, è possibile inviare un modulo nascosto nel popup:

Esempio:

<form method="post" target="popup" id="formID" style="display:none" action="https://example.com/barcode/generate" > 
    <input type="hidden" name="packing_slip" value="35592" /> 
    <input type="hidden" name="reference" value="0018439" /> 
    <input type="hidden" name="total_boxes" value="1" /> 
</form> 
<script type="text/javascript"> 
window.open('about:blank','popup','width=300,height=200') 
document.getElementById('formID').submit(); 
</script> 

Altrimenti si potrebbe usa jsonp. Ma funziona solo se si ha accesso all'altro server, perché è necessario modificare la risposta.

25

La risposta accettata non funziona con "use strict" poiché l'istruzione "with" genera un errore. Così, invece:

$.post(url, function (data) { 
    var w = window.open('about:blank', 'windowname'); 
    w.document.write(data); 
    w.document.close(); 
}); 

Inoltre, assicurarsi che 'windowname' non ha spazi in essa, perché che non riuscirà in IE :)