Javascript jQuery.get无法在github站点上使用https(甚至请求到同一域)

Javascript jQuery.get无法在github站点上使用https(甚至请求到同一域),javascript,jquery,Javascript,Jquery,我已经看过了其他答案,但在我的例子中,我正在做一个简单的jQuery.get请求,在我的同一个域上也是这样: //Now, lets pull the data for panels var maxi = $('#mainpanel .panel[id]').length; var count = 0; var processed = []; $('#mainpanel .panel[id]').each(function(index) { var id = $(this).attr(

我已经看过了其他答案,但在我的例子中,我正在做一个简单的jQuery.get请求,在我的同一个域上也是这样:

//Now, lets pull the data for panels
var maxi = $('#mainpanel .panel[id]').length;
var count =  0;
var processed = [];
$('#mainpanel .panel[id]').each(function(index) {
    var id = $(this).attr('id');
    var turl = '/kb/resources/' + id;
    console.log('pulling data for resource',id,turl);
    $.get(turl , function(data){ 
        console.log('success');
        var dummy = document.createElement("data");
        window.dummy = dummy;
        $(dummy).append(data);
        var title = $(dummy).find('h1').text();
        var header = document.createElement("div");
        var panelBody  = document.createElement("div");
        var ul = document.createElement("ul");
        console.log('dbg 1');

        $(header).addClass('text-center panel-heading');
        $(header).append('<h4><a href="' + turl + '">' + title +  '</a></h4>');
        $(panelBody).addClass('panel-body panel-res-summary');
        $(panelBody).append(ul);
        console.log('dbg 2');

        $('#' + id).append($(header));
        $('#' + id).append($(panelBody));
        $(dummy).find('.container.default li').each(function(index){
            var item = $(this).find('a:first');
            var cls='';
            if (item.hasClass('imp')) cls='class="imp"'; // mark
            if ($(panelBody).height() >= 200)  return;
            $(ul).append('<li><a ' + cls + ' href="' + item.attr('href') + '">' + item.text()  + '</a></li>');
        });
        console.log('dbg 3');

        $(panelBody).append('<a class="small pull-right" href="' + turl + '"><em><u>more...</u></em></a>');
        processed.push(id);
        count += 1;
        console.log('processed');
        if (count>=maxi) {  //(count%3==0)
                msel = '#' + processed[count-1];
                msel += ' #' + processed[count-2];
                msel += ' #' + processed[count-3];
                adjustBoxes(); //Now, lets adjust the heights of all panels
                console.log('now called adjustBoxes');
            }
    });
//现在,让我们提取面板的数据
var maxi=$('#mainpanel.panel[id]')。长度;
var计数=0;
var处理=[];
$('#mainpanel.panel[id]')。每个(函数(索引){
var id=$(this.attr('id');
var turl='/kb/resources/'+id;
日志('为资源提取数据',id,turl);
$.get(turl,函数(数据){
console.log('success');
var dummy=document.createElement(“数据”);
window.dummy=dummy;
$(虚拟)。追加(数据);
var title=$(虚拟).find('h1').text();
var header=document.createElement(“div”);
var panelBody=document.createElement(“div”);
var ul=document.createElement(“ul”);
console.log('dbg1');
$(标题).addClass('text-center面板标题');
$(标题)。附加(“”);
$(panelBody).addClass('panel-body panel res summary');
$(面板主体)。附加(ul);
console.log('dbg2');
$('#'+id).append($(头));
$('#'+id).append($(panelBody));
$(虚拟)。查找('.container.default li')。每个(函数(索引){
var item=$(this.find('a:first');
var-cls='';
if(item.hasClass('imp'))cls='class=“imp”';//标记
如果($(panelBody).height()>=200)返回;
$(ul).追加(“
  • ”); }); console.log('dbg3'); $(面板主体)。附加(“”); 已处理。推送(id); 计数+=1; console.log('processed'); 如果(计数>=maxi){//(计数%3==0) msel='#'+已处理[count-1]; msel+='#'+已处理[计数-2]; msel+='#'+已处理[count-3]; AdjustBox();//现在,让我们调整所有面板的高度 log('现在称为AdjustBox'); } });
    上述代码在localhost上运行良好,即使在站点版本中也是如此,但无法检索站点版本中的内容。既然我向同一个域发出请求,为什么它不返回任何内容

    编辑

    正如在评论中提到的,我使用公认的答案解决了这个问题。在url末尾添加反斜杠解决了这个问题,但问题仍然存在。这似乎是承载github页面的服务器的问题

    编辑2


    正如@jcaron正确指出的那样,问题肯定出在我的url上。它提供了一个
    jekyll
    生成的静态页面,该页面最后需要
    /
    。由于我的代码缺少该页面,gh pages返回了301重定向并拒绝了第二个请求。然而,如果gh pages能够正确重定向到我的ajax请求的话st,我的问题从一开始就不会出现。简而言之,gh页面末尾的小故障仍然存在!

    问题的出现是因为两个问题的结合:

    • 您的URL(例如
      http://www.prahladyeri.com/kb/resources/php
      )不是实际的“良好”URL,它需要重定向才能添加最终的
      /

    • 服务器错误地重定向到
      http
      ,而不是
      https
      版本

    因此,您的代码发出请求,获取301,尝试向
    http
    URL发出第二个请求,然后被拒绝

    两种可能的解决办法:

    • 正确地包括最终的
      /

    • 修复服务器以正确重定向到相应的协议


    您会遇到什么错误?Chrome console说,当您的站点通过HTTPS被请求时,您的AJAX请求是向HTTP版本发出的,而不是HTTPS版本,因此浏览器将其作为“混合内容”阻止@CBroe我想知道为什么请求会转到HTTP版本?我已经清楚地编写了
    var turl='/kb/resources/'+id;
    。这不是意味着相同的主机和协议(HTTPS)?@jcaron-没有错误,根本没有调用
    $.get()
    请求回调函数。正如您所看到的,我已经打印了
    控制台.log('success'))
    当它被调用时,但我在控制台上的任何地方都看不到该消息。正如@CBroe所指出的,控制台应该给你一个错误。它在这里是这样做的,但由于某种原因,我不再得到错误,页面组件现在加载正确。你有什么改变吗?谢谢你的解释,@jcaron!我怀疑有什么问题之所以这样做,是因为我正在使用Jekyll生成静态页面。所讨论的服务器是github页面(由github.com提供的宿主)。因此,修复这一问题是不可能的:-)。我添加了最后一个斜杠作为解决方法,但很高兴知道是什么导致了这一问题。