【问题标题】:Access inline javascript variables that are generated via Ajax call? Barba.js question specifically访问通过 Ajax 调用生成的内联 JavaScript 变量? Barba.js 问题具体
【发布时间】:2019-12-04 19:55:12
【问题描述】:

我在我的网站上使用 Barba.js。当通过 Barba.js 加载“投资组合”页面时,我运行一个函数,我们称之为 get_portfolio_items()get_portfolio_items() 需要访问一些内联 javascript 变量的值。如果“投资组合”页面是要加载的第一个页面,则 get_portfolio_items() 可以很好地访问这些变量。但是,如果先加载另一个页面,然后单击进入 Portfolio 页面,则会出现错误:

loadMoreVars 未定义。

尽管我可以看到 loadMoreVars 在 DOM 中。

如何在 get_portfolio_items() 中访问这些变量?谢谢!

这是出现在新页面上的实际 HTML 中的脚本:

<script type="text/javascript">
      var loadMoreVars = {
        postsPerPage : 9,   
        maxNumPages : 6,
      };
</script>

这是每当通过 Barba.js 加载新页面时调用的函数

function get_portfolio_items(){
 alert(loadMoreVars.postsPerPage);
 alert(loadMoreVars.maxNumPages);
}

这是加载新页面时触发该函数的 Barba.js 代码。

Barba.Dispatcher.on('newPageReady', function(current, prev, container) {
    history.scrollRestoration = 'manual';
    get_portfolio_items()
});

如何让函数查看变量并提醒它们?

【问题讨论】:

  • 你能提供更多代码吗?很难理解发生了什么。
  • 您好,我编辑了以上内容以提供更清晰的信息。请让我知道这是否有意义
  • 脚本标签是在页面的头部还是正文中?
  • 将包含'loadMoreVars'的脚本加载到body中,barba.js及相关脚本也初始加载到body中

标签: javascript ajax scope barbajs


【解决方案1】:

有点晚了,但我设法让它工作。将变量设置为窗口对象很重要。

<!-- HTML FILE -->
<script class="loadInlineScript">
  window.loadmoreurl='FOO';
</script>

// JS FILE
Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container) {
  var inlineScript = $(container).find('script.loadInlineScript')
  inlineScript.each(function(i, elm) {
    eval(elm.innerHTML);
  })
});

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多