【问题标题】:Is it possible to use jQuery on a new window?是否可以在新窗口上使用 jQuery?
【发布时间】:2019-03-19 23:03:02
【问题描述】:

我已经尝试解决这个问题几个小时了,也许你们中的任何人都可以帮助我。

现在我的代码如下所示:

$('.clickable').on('click', function() {
  var id = $(this).attr('data-packages');
  id = "'" + id + "'";
  $.ajax({
    url: "show.php",
    data: {
      type: "showSFM",
      data: id,
      user: username
    },
    type: "POST",
    success: function(data) {
      $('#main').html(data);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

一切正常,但我在问自己是否可以在新窗口上使用$('#main').html(data)。现在,如果我单击一个元素,当前窗口将显示结果,但我希望弹出一个新选项卡以显示结果。

我正在尝试这样的事情:

success: function(data) {
  var url = location.href;
  var window = window.open(url);
  window.document.getElementById('main').innerHTML = data;
}

我得到的结果是该窗口在主页上打开。看起来window.open(url) 工作正常,但下面的行什么也没做。

【问题讨论】:

  • 如果这是你想要的,为什么不使用一个针对新页面的普通表单提交或链接?
  • 由于网站的编码方式,在这种情况下,正常的链接不起作用。我需要一个新标签来打开和更改新页面的内容。有没有办法做到这一点?
  • 你得到了什么结果?窗户会打开吗?内容没有加载吗?
  • 我得到的结果是窗口在主页上打开。看起来 window.open(url) 工作得很好,但下面的行什么也没做。

标签: javascript jquery ajax


【解决方案1】:

这可能不起作用的原因是您使用的事实:

window.document.getElementById('main')

窗口可能已经被前一行打开,但很可能没有加载并且不包含 id main 的元素(因为发出 HTTP(S) 请求需要时间)。这可以通过将 main 元素的填充移动到回调中来解决。

window.addEventListener('load', function () {
  window.document.getElementById('main').innerHTML = data;
}, { once: true });

【讨论】:

  • 现在它工作得很好但我遇到的另一个问题是$('#main').html(data) 让我得到其他结果然后document.getElementById('main').innerHTML = data; 有没有办法在我创建的新选项卡上使用 jQuery 代码?
  • 您仍然可以使用 jQuery,因为 JavaScript 不会在新页面上运行,而只会影响它。查看stackoverflow.com/questions/7788480/…,了解如何使用新创建的页面来使用它。
【解决方案2】:

您可以在 URL 中发送请求所需的数据,然后在新页面上,您可以再次发送 AJAX 请求,并从 URL 中获取您需要的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多