2010-09-29 46 views
31

我有一个脚本,on.DocumentReady发布数据到另一个页面。该页面用封装在一个div标签中的HTML进行响应。jquery后,在新窗口中的答复

我的目标是让这个帖子的回复/数据在新窗口中打开。

任何提示或线索?

这是我从米勒博士的建议中创建的代码片段。

<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

使用'window.open'失败? – Alec 2010-09-29 19:25:36

+0

我想你一定会忘记这一点。任何弹出式窗口拦截器都会阻止一个新窗口,而不需要点击等特殊的用户操作。 – 2010-09-29 19:39:05

+0

Drle Molle,我在一个受控环境中为我的网站启用了弹出窗口... – Peter 2010-09-29 19:44:50

回答

52

使用写() - 弹出的文件的方法把你的标记有:

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

我想我正在使用你说的正确的......,但它并没有打开弹出窗口或实际上发布任何数据到服务器。我将新代码放在原始文章中。 – Peter 2010-09-29 20:34:07

+1

使用看起来正确。您使用的是绝对网址,是什么原因? – 2010-09-29 20:55:27

+0

该URL位于单独的服务器上。当我在当地的mamp安装中运行它并使用“Coda的”预览功能时,我现在能够正常工作......但是当我通过Safari浏览器运行它时,根本没有数据出现......我现在很困惑。感谢您的所有帮助。 – Peter 2010-09-29 21:26:16

-4

尝试

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

,并有page.php文件显示任何数据被认为是

+0

我张贴的页面返回我想在新窗口中打开的html ...必须将它发送到另一个页面,好像做了两次... – Peter 2010-09-29 20:36:07

+0

已将页面发送给它,只是发送数据。否则我不知道如果你可以通过HTML window.open,谷歌搜索会告诉你,如果这可能。 – Ascherer 2010-09-29 20:37:42

3

如果你不需要一个关于请求的数据反馈,也不需要揭幕战和弹出之间的任何互动,您可以发布一个隐藏的形式进入弹出:

例子:

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

否则,你可能使用jsonp。但是,如果您有权访问其他服务器,则这只适用于您,因为您必须修改响应。

25

接受的答案在“with strict”中不起作用,因为“with”语句会引发错误。因此,而不是:

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

此外,还要确保“windowname”没有在任何空间,因为这会在IE :)