2010-09-29 9 views
31

Tengo un script que on.DocumentReady envía datos a otra página. Esa página responde con un poco de HTML encapsulado en una etiqueta div.Publicación de Jquery, respuesta en una nueva ventana

Mi objetivo es que esta publicación de respuesta/datos se abra en una nueva ventana.

¿Algún indicio o pistas?

Aquí está el fragmento que creé del consejo 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

Use 'window.open'? – Alec

+0

Creo que debes olvidar esto. Cualquier Popup-Blocker bloqueará una nueva ventana sin una acción de usuario especial como clics. –

+0

Dr. Molle, estoy usando esto en un entorno controlado donde las ventanas emergentes están habilitadas para mi sitio ... – Peter

Respuesta

52

Uso de la escritura() - Método del documento de la ventana emergente para poner su margen de beneficio allí:

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

Creo que estoy usando lo que dices correctamente ..., pero no está abriendo una ventana emergente o publicando datos en el servidor. Puse el nuevo código en la publicación original. – Peter

+1

El uso parece correcto. Está utilizando una URL absoluta, ¿cuál es el motivo? –

+0

La url está en un servidor separado. Lo tengo funcionando ahora cuando lo ejecuto en la instalación de mi mamp local y usando la función de vista previa de "Coda" ... pero cuando lo ejecuto en Safari, no hay datos que se acerquen ... Ahora estoy tan confundido. Gracias por toda su ayuda hasta ahora. – Peter

-4

tratar

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

y tienen page.php muestran todos los datos que se suponía que era

+0

La página que estoy publicando devuelve el html que quiero abrir en una nueva ventana ... tener que enviarlo a otra página parece hacerlo dos veces ... – Peter

+0

tiene la página a la que lo está enviando, solo envíe los datos. de lo contrario, no estoy seguro si puede pasar html a window.open, aunque una búsqueda en Google le diría rápidamente si eso es posible. – Ascherer

3

Si usted no necesita una retroalimentación sobre los datos solicitados y no necesita ninguna interactividad entre el abridor y el emergente, puede enviar un formulario oculto en la ventana emergente:

Ejemplo:

<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> 

lo contrario, podría usa jsonp. Pero esto solo funciona si tiene acceso al otro servidor, porque debe modificar la respuesta.

25

La respuesta aceptada no funciona con "use strict", ya que la instrucción "with" arroja un error. Así que en lugar:

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

Además, asegúrese 'WindowName' no tiene ningún espacio en que debido a que se producirá un error en el IE :)

Cuestiones relacionadas