javascript中setTimeout每隔1秒调用一次ajax,但回调函数只调用一次。求解。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript中setTimeout每隔1秒调用一次ajax,但回调函数只调用一次。求解。。相关的知识,希望对你有一定的参考价值。

部分代码如下: function getUsers()//查询所有在线用户
var url="chat-room?"+Math.random();
httprequest.onreadystatechange=userlist;
httprequest.open("get",url,true);
httprequest.send(null);


function userlist()
if(httprequest.readyState==4)
if(httprequest.status==200)
var s=httprequest.responseText;
//由此得到所有在线用户




第一次没问题,我今天忙了一天之这个了,我每一秒查询一下在线的用户,但第一次行。其他用户下线后,查询到了,但返回不到回调函数上。
刚有人指点我一下,就是在回调函数里调用getusers(),不用那个timer,等明天我试试。

还有发送消息时 定义url="sendmessage?message='房价的快速路附近'&touserid=1000"
总出现中文乱码,请问有什么好的办法?

参考技术A function getUsers()//查询所有在线用户
var url="chat-room?"+Math.random();
httprequest.onreadystatechange=userlist;
httprequest.open("get",url,true);
httprequest.send(null);
window.setTimeout(getUsers,1000)
追问

function timer()
getUsers();
setTimeout("timer()",1000);

我已经有timer了
可以不断的查询了,但只执行一次回调函数

追答

httprequest.open("get",url,false);//改成同步执行看看!

追问

试过了,不行

参考技术B 这个不大懂哦 参考技术C 看不懂55 参考技术D 你得到第一次正确的结果了么? 第5个回答  2011-09-01 把代码贴全了再说,你是想做AJAX长轮询吧?本回答被提问者采纳

使用javascript在django中每隔几秒刷新一个特定的div

【中文标题】使用javascript在django中每隔几秒刷新一个特定的div【英文标题】:Refreshing a specific div every few seconds in django using javascript 【发布时间】:2017-01-18 22:24:06 【问题描述】:

我正在尝试使用 javascript 在我的 HTML 页面中每隔几秒刷新一次表格的内容。尝试刷新 div 时,我不断收到 500 错误,内部服务器错误。有人可以解释这不起作用的原因吗?我用过这个:Refresh div using JQuery in Django while using the template system 作为我正在做的事情的参考。页面第一次加载完美,只是刷新失败。

这是我的代码:

urls.py

url(r'^specialScoreboard/$', views.specialScoreboard.as_view(), name='specialScoreboard'),
url(r'^specialScoreboardDiv/$', views.specialScoreboardDiv , name='specialScoreboardDiv'),

views.py

class specialScoreboard(generic.ListView):
    template_name = 'CTF/specialScoreboard.html'
    context_object_name = 'teams'

    @method_decorator(login_required)
    @method_decorator(never_ever_cache)
    def dispatch(self, request, *args, **kwargs):
        if getAnyActiveGame and request.user.is_staff:
            return super(specialScoreboard, self).dispatch(request, *args, **kwargs)
        else:
            return HttpResponseRedirect(reverse('CTF:no_active_game'))

    def get_queryset(self):
         """
            ordering teams by score
        """
        game = getAnyActiveGame()
        teams = get_teams_from_game(game)
        return sorted(teams, key=lambda a: a.get_score(game), reverse=True)

def specialScoreboardDiv():
    game = getAnyActiveGame()
    teams = get_teams_from_game(game)
    sortedList = sorted(teams, key=lambda a: a.get_score(game), reverse=True)
    return render_to_response('CTF/specialscoreboardDiv.html' , 'sortedList' :sortedList)

scoreboardRefresh.js + scoreboardDiv.html

<script>
  var scoreboardURL = '% url '
CTF: specialScoreboardDiv ' %';

function refresh() 
  $.ajax(
    url: scoreboardURL,
    success: function(data) 
      $('#scoreboardDiv').html(data);
    
  );
;
$(document).ready(function($) 
  refresh();
  setInterval("refresh()", 3000);
)

</script>
<div class="panel panel-info">
  <div class="panel-heading">Scoreboard</div>
  <div class="panel-body">

    <div class="table-striped">
      <table id="scoreboardDiv" class="table table-hover">
        <thead>
          <tr>
            <th>#</th>
            <th>Team Name</th>
            <th>Score</th>
          </tr>
        </thead>
        <tbody>
          % for team in teams %
          <tr>
            <td>forloop.counter</td>
            <td>team.name</td>
            <td>team|getScoreTeam</td>
          </tr>
          % endfor %
        </tbody>
      </table>
    </div>
  </div>
</div>

我似乎无法格式化错误,这是它的图片:http://i.imgur.com/Yc11juA.png http://i.imgur.com/QluqZyc.png http://imgur.com/QluqZyc

【问题讨论】:

错误说明了什么? 您的 JS 开头的 scoreboardURL 代码是怎么回事?这根本没有意义。 另外,请修复views.py中的缩进。哪些方法是类的一部分,哪些不是? 实际上,看起来我们需要一个服务器错误的文本。 我加了一张错误的图片,我好像无法格式化,总是看不懂。 【参考方案1】:

您的 django 视图不接受任何参数,但通常 django 会尝试将请求参数传递给它。从您在 cmets 中提供的屏幕截图中的错误来看,这似乎是您的问题。

我认为你的错误可以通过让你的视图函数接受这个参数来解决:

def specialScoreboardDiv(request):
    game = getAnyActiveGame()
    ...

【讨论】:

它不再出错但也不更新表格内容:( 那么,接下来你需要找出问题出在哪里。您的视图是否返回它应该返回的 html?您的 JS 是否获得正确的 html?是否触发了成功回调?以此类推。 这是数据的图片:i.imgur.com/IptrwHd.png 在 ajax 函数中,它确实返回了正确 div 的 html,但没有更新它。我错过了什么吗?我发送的 html 页面是 specialScoreboardDiv.html

以上是关于javascript中setTimeout每隔1秒调用一次ajax,但回调函数只调用一次。求解。。的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript定时器案例:显示年月日时分秒+每隔60s发送一次短信

Chrome开发者工具中Elements(元素)断点的用途

每隔 xxxx 秒 刷新一次页面

每隔 xxxx 秒 刷新一次页面

每隔 x秒 刷新一次页面

每个循环中的 settimeout 有问题