【问题标题】:Jquery post, response in new windowJquery 帖子,在新窗口中回复
【发布时间】:2010-09-29 19:22:43
【问题描述】:

我有一个 on.DocumentReady 将数据发布到另一个页面的脚本。该页面以封装在一个 div 标记中的一些 HTML 进行响应。

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

任何提示或线索?

这是我根据 Mille 博士的建议创建的 sn-p。

 <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();
        }
    });
 });

【问题讨论】:

  • 我认为你必须忘记这一点。任何弹出窗口阻止程序都会阻止一个新窗口,而无需像点击这样的特殊用户操作。
  • Molle 博士,我在为我的网站启用弹出窗口的受控环境中使用它...
  • Alec,你能给我举个例子,说明如何结合使用 window open 和 jquery post 吗?我想了想,但无法弄清楚或在网上找到任何示例。感谢您的回复!

标签: javascript jquery


【解决方案1】:

使用 Popup 文档的 write()-Method 将您的标记放在那里:

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

【讨论】:

  • 我想我正在使用您所说的正确...,但它没有打开弹出窗口或实际上将任何数据发布到服务器。我将新代码放在原帖中。
  • 使用看起来是正确的。您使用的是绝对 URL,这是什么原因?
  • 网址在单独的服务器上。当我在本地 mamp 安装上运行它并使用“Coda”的预览功能时,我现在可以正常工作了……但是当我通过 safari 运行它时,根本没有数据出现……我现在很困惑。感谢您迄今为止的所有帮助。
  • AJAX-Requests 仅适用于同一个域。在没有 AJAX 的情况下做这件事会是一个机会吗?
  • 我只是将脚本移动到该服务器上...但我真的很想知道您会使用什么而不是 ajax...感谢您的所有帮助!
【解决方案2】:

接受的答案不适用于“use strict”,因为“with”语句会引发错误。所以改为:

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

另外,请确保“windowname”中没有任何空格,因为这将在 IE 中失败:)

【讨论】:

    【解决方案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。但这仅适用于您有权访问其他服务器的情况,因为您必须修改响应。

    【讨论】:

      【解决方案4】:

      我是用一个 ajax 帖子做的,然后用一个数据 url 返回:

      $(document).ready(function () {
          var exportClick = function () {
              $.ajax({
                 url: "/api/test.php",
                 type: "POST",
                 dataType: "text",
                 data: {
                    action: "getCSV",
                    filter: "name = 'smith'",
                 },
                 success: function(data) {
                    var w = window.open('data:text/csv;charset=utf-8,' + encodeURIComponent(data));
                    w.focus();
                 },
                 error: function () {
                    alert('Problem getting data');
                 },
              });
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        相关资源
        最近更新 更多