Ajax 对于 "load on scroll" 脚本提供 403

Ajax for "load on scroll" script delivers 403

我正在 hubspot cos 上建立博客。我们希望博客文章滚动加载。我找到了一个脚本,声明它可以执行此操作并且专门用于 Hubspot。

也就是说,当我通过滚动激活脚本时,我在控制台中收到 403。我认为这不像 Ajax 问题那么严重。

我使用的脚本: 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 = {};
})()

TL;DR -- 您收到 403 是因为脚本使用的是 jQuery 的 .post 而不是 .get;不允许使用 http POST 到 HubSpot COS/blog 页面。这出现在此处原始 js 示例的第 45 行:http://www.uvm.edu/~enewbury/swoosh/swoosh.js

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


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

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

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