【问题标题】:Getting an html file through a jquery get function. Django通过 jquery get 函数获取 html 文件。姜戈
【发布时间】:2012-11-11 16:02:22
【问题描述】:

在我的 django 应用程序中,我显示用户 facebook 好友列表。为了每 10 分钟刷新一次,我把这个列表放在另一个视图和 html 中,并使用 get 请求来获取它并显示在我不想显示的页面上。

这是我的朋友列表的 get_fb_friends.html 文件:(这是我与我创建的视图相关联的 html 文件。这是我不想在我显示的页面上显示的列表的地方用户):

   {% for friend in group %}
    <li>{{ friend.name }} </li>
   {% endfor %}

以及我如何在模板中导入它:(这是我不想为用户显示列表的页面)。

JS:
     setInterval(function(){
        $.get('/mysite/get_fb_friends/', function(data) {
        $('.get_fb_friends').html(data);
    });
    }, 600000);

    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};

   $(function() {
   $('#searchbox').on('keyup', function() {
    var w = $(this).val();
   if (w) {
    $('#friendlist li').hide();
    $('#friendlist li:Contains('+w+')').show();
  } else {
    $('#friendlist li').show();                  
 }
 });
 });



 HTML:

     <div class='get_fb_friends'> </div>

然后,我不想在此列表顶部包含搜索栏,以便用户能够搜索他想要的朋友。所以在我的 get_fb_friends.html 中,我添加了:

  HTML:
    <input id="searchbox" type="text" placeholder="Search" />    
    <ul id="friendlist">
    {% for friend in group %}
    <li>{{ friend.name }} </li>
    {% endfor %}

如果我在页面 www.mysite/get_fb_friends 上使用此搜索栏,它会完美运行,但一旦通过 jquery get 请求(即在我不想为用户显示它的页面上)获得它就不再适用;我输入一个字母,所有的名字都消失了。

看起来当我通过 jquery get 函数获取 html 文件时,它没有在我的 jquery 函数中保留我需要的“li”。

知道发生了什么吗?

希望我的问题很清楚,谢谢你的帮助。

编辑:

我的主页:

 HTML:
 <div class="friendlist" id="friendlist"> 


 JS:

 $.get('/mysite/get_fb_friends/', function(data) {
    $('.friendlist').html($(data).find($('#friendlist').html()));
    });

 return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
    };

   $(function() {
    $('#searchbox').on('keyup', function() {
      var w = $(this).val();
       if (w) {
        $('#friendlist li').hide();
        $('#friendlist li:Contains('+w+')').show();
      } else {
        $('#friendlist li').show();                  
     }
     });
     });

我的远程页面:

 HTML:
 <input id="searchbox" type="text" placeholder="Search" />    
 <ul id="friendlist" class="friendlist">

  {% for friend in group %}
    <li>{{ friend.name }}</li>
  {% endfor %}

【问题讨论】:

  • 令人困惑的是什么 html/js 在什么文件中以及以什么顺序。可以将$.get 进一步简化为$('.get_fb_friends').load('/mysite/get_fb_friends/');,但这不会解决任何其他问题
  • 好的,谢谢你的提示。我编辑了我的问题以使其更清晰,希望对您有所帮助。

标签: javascript jquery django


【解决方案1】:

我相信您真的只想更新列表内容,而不是每次刷新都替换 input 和完整列表本身。

在这种情况下,您希望所有 JS 在主页中,将远程文件的输出更改为简单地发送回 LI 标签并将它们插入新目标 friendlist。此插入可以是完全替换,或仅附加新找到的名称。不确定您的应用打算如何处理这方面的问题

如果用户正在对输入进行任何过滤,您还可以添加一个标志以不进行 ajax 调用。

标志可能类似于

$('#searchbox').on('focus blur', function(){
   $(this).toggleClass('active')
})

然后在setInterval

setInterval(function(){
        if( ! $('#searchbox').hasClass('filter') ){
            $('#friendlist').load('/mysite/get_fb_friends/')
       }
    }, 600000);

【讨论】:

  • 感谢您的回答。我需要完全替换,因为我根据朋友的活动(活动、空闲或离线)对他们进行排序。因此,如果我得到您所说的,我必须将搜索栏(html 和 JS)放在主页中。然后我需要更改我的 jquery 获取请求以便仅获取 LI 标签。但我不得不承认我不知道如何要求获取请求来获取它。你能给我一个提示,或者一个关于jquery get函数的好教程吗?谢谢!
  • 你能改变远程页面的输出只发送LI标签吗?如果不是远程页面可以在主页面的ajax成功解析
  • 也刚刚注意到 $('#friendlist').hide(); 应该是 $('#friendlist li').hide(); 并且可能是根本看不到任何东西的根本原因。您正在隐藏父级,并且您无法随时显示隐藏父级的子级
  • 我真的不知道我怎么只能发送 LI 标签。你能帮我解决这个问题吗?
  • OK 可以这样做 $.get('/mysite/get_fb_friends/', function(data) { $('#friendlist').html($(data).find( $('#friendlist').html()); }); 这将解析返回的页面,只拉出LI标签并在主页中替换它们
猜你喜欢
  • 2020-08-17
  • 2010-11-11
  • 2013-09-11
  • 2020-11-15
  • 2017-05-25
  • 1970-01-01
  • 2017-01-14
  • 2018-05-10
  • 2011-10-15
相关资源
最近更新 更多