【问题标题】:Ajax for "load on scroll" script delivers 403用于“滚动加载”脚本的 Ajax 提供 403
【发布时间】:2016-01-11 15:02:01
【问题描述】:

我正在 hubspot cos 上建立一个博客。我们希望博客文章在滚动时加载。我找到了一个脚本,它声明它这样做并且专门用于 Hubspot。

话虽如此,当我通过滚动激活脚本时,我在控制台中收到 403。我认为这不像 Ajax 问题那样是 hubspot 问题。

我正在使用的脚本: www.uvm.edu/~enewbury/swoosh/

我们 hubspot cdn 上的脚本: http://cdn2.hubspot.net/hub/1739321/hub_generated/template_assets/1452520555218/custom/page/JS/Swoosh.min.js

博客: http://insights.signetaccel.com/blog

唯一让我印象深刻的是 ajax 请求是跨域的,但这在 hubspot 中的文件和公司域之间是正常的,所以如果这个脚本是为在 hubspot 中使用而构建的,我认为所有者会已经考虑到这一点。

我已经寻找了所有答案,但我空手而归。应该注意的是,php 代理不起作用,因为服务器端编程不是 hubspot 的选项。

我真的很感激一些答案或一些关于在这里做什么的提示。

$(document).ready(function(){
        $(".grid").swoosh();
    });



(function(a) {
a.fn.swoosh = function(f, k) {
    if (!f) {
        f = "Loading..."
    }
    if (k == null) {
        k = -1
    }
    var c = this;
    var e = false;
    var j = 2;
    var d = window.location.href.toString().split("/");
    var i = d[0] + "//" + d[2] + "/" + d[3] + "/";
    var h = i + "page/";
    var g = "";
    var b = false;
    if (f != "Loading...") {
        c.parent().append('<div class="loading"><img src="' + f + '"></div>')
    } else {
        c.parent().append('<div class="loading">' + f + "</div>")
    }
    a(".loading").hide();
    a(document).scroll(function() {
        if (b || e || j == 0) {
            return false
        }
        if (a(window).scrollTop() >= a(document).height() - a(window).height() - a(".footer-container-wrapper").height() - 150) {
            b = true;
            a(".loading").fadeIn(200);
            g = h + j;
            a.post(g, function(m) {
                var l = a(m).find(".grid-item");
                      if (l.length) {
                          console.log(f);
                            a(".loading").fadeOut(200, function() {
                             l.appendTo(".grid")
                        });
                        j++;
                         a(".next-posts-link").attr("href", h + j)
                     } else {
                         e = true;
                         a(".next-posts-link").after('<div class="next-posts-link unactive">Next</div>');
                         a(".next-posts-link:not(.unactive)").remove();
                        a(".loading").fadeOut(200)
                        }
                        b = false;
                        setTimeout(function() {
                        twttr.widgets.load();
                        IN.parse();
                        FB.XFBML.parse();
                        gapi.plusone.go()
                    }, 350)
                })
             }
        })
    }
})(jQuery);
(function() {
    return window.SIG_EXT = {};
})()

【问题讨论】:

  • 请提供滚动调用的代码。谢谢!
  • 你的意思是我刚刚添加的代码吗?
  • 很遗憾没有。我的意思是正在发送的 Ajax 调用。这可能是一个 CORS 问题。你在做跨域请求吗?
  • 我链接到了脚本。它在 cdn2.hubspot.net 上,而博客 url 是insights.signetaccel.com

标签: javascript ajax hubspot


【解决方案1】:

TL;DR -- 你得到一个 403 因为脚本使用 jQuery 的 .post 而不是 .get;不允许向 HubSpot COS/博客页面发送 http POST。这出现在原始 js 示例的第 45 行:http://www.uvm.edu/~enewbury/swoosh/swoosh.js

为 GET 切换 HTTP 方法,然后继续调试。该脚本是非官方的,虽然旨在通用,但依赖于 HubSpot 的 COS/blog 生成的特定主体结构和元素分类。可能需要进行更多调试才能使其正常工作。


详情: 这个脚本的工作方式有点笨拙。它不会从 API 或其他高效资源中获取博客内容——相反,它会在您滚动时抓取 /page/2、/page/3 等的完整 HTML,从它检索到的响应中解析出博客文章 HTML,并且将它在异步获取中找到的帖子注入当前页面。

使用 POST 而不是 GET 来获取此内容会生成 403 Forbidden。

可能存在更多问题,因为脚本在很大程度上取决于某些元素以特定方式分类,但这解决了您直接的 403 问题。

【讨论】:

  • 乐于助人!我想您已经找到了,但请务必查看designers.hubspot.com 了解更多基础信息。开始使用 HubSpot COS (CMS) 的绝佳资源。
猜你喜欢
  • 2018-03-05
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多