Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在my javascript for polling事件中从未触发成功事件_Javascript - Fatal编程技术网

在my javascript for polling事件中从未触发成功事件

在my javascript for polling事件中从未触发成功事件,javascript,Javascript,对编程非常陌生。 我正在尝试使用django和芹菜开发一个web应用程序。我想显示一个加载器,直到某个芹菜后台任务正在执行,然后显示芹菜工人获取的数据。 到现在为止,我的状态是这样的 我的loader.js脚本是: var-myVar; 函数myFunction(){ myVar=setTimeout(showPage,3000); } 函数poll1(){ setTimeout(函数(){ $.ajax({ url:“http://localhost:8000/celery-进度/任务\进度

对编程非常陌生。 我正在尝试使用django和芹菜开发一个web应用程序。我想显示一个加载器,直到某个芹菜后台任务正在执行,然后显示芹菜工人获取的数据。 到现在为止,我的状态是这样的 我的loader.js脚本是:

var-myVar;
函数myFunction(){
myVar=setTimeout(showPage,3000);
}
函数poll1(){
setTimeout(函数(){
$.ajax({
url:“http://localhost:8000/celery-进度/任务\进度/12/“,
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
},
键入:“获取”,
成功:函数(myFunction)}
(函数poll(){
$.ajax({url:http://localhost:8000/celery-progress/task_progress/12/”,键入:“GET”,成功:函数showPage1(){
document.getElementById(“加载器”).style.display=“无”;
document.getElementById(“myDiv”).style.display=“block”;
},数据类型:“json”});
})();
函数showPage(){
document.getElementById(“加载器”).style.display=“无”;
document.getElementById(“myDiv”).style.display=“block”;

}
您好
您必须将一个函数分配给success属性,这意味着您不应该像以前那样编写它(就像您用另一个函数作为参数定义一个新函数)
尝试以下操作:

function poll1() {
  $.ajax({
    url: "http://localhost:8000/celery-progress/task_progress/12/",
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    type: "GET",
    success: myFunction
  })
}
你做了另一件我不能很好理解的工作,我的意思是在poll1函数中使用setTimeout。
所以我删除了它。

现在,使用上面的代码,在AJAX成功3秒钟后,将调用showPage函数,如果您不想等待3秒钟,可以直接将showPage分配给success属性。

1.括号不正确。2.您认为如何
success:function(myFunction)
does?我从internet复制了poll1和poll函数。对于第一个函数,括号不起作用。我基本上希望轮询函数每秒轮询url,当返回的json成功事件设置为true时,它应该调用showPage函数。成功成员需要一个函数。
function(myFunction)
只不过是一个语法错误。你可以简单地说
success:myFunction
将对
myFunction
函数的引用传递给它。你确实需要修复所有括号才能使它正常工作。一个像样的IDE应该为你突出显示哪个开始括号属于哪个结束括号。确保它们都加在一起。两个更多澄清:1)成功事件何时触发?是否取决于我的轮询URL返回的json。它如何知道现在有成功。2)poll1的语法正确,所以poll1函数在成功时不应该正常工作吗?浏览器收到成功响应后会触发success get。从这个意义上说,成功意味着在200~299范围内。当您获得400~499或500~599范围内的状态时,它将不会执行。(我不确定100~199和300~399。)谢谢@Kavian:)。非常有用。需要一些澄清。**1)调用轮询url检查成功的频率(i 1times/sec或1times/3sec).2)当您说“将showPage直接分配给success属性”时,您能详细说明一下吗?我该怎么做?**关于您的问题,我只是从internet复制了这个函数并尝试了一下。不知道setTimeout不是req:p。@codeaprendiz 1)我想您误解了AJAX方法在这里的工作方式,这是一个事件侦听器这正是您想要的“仅一次”当请求成功时,您不需要检查是否完成(搜索事件侦听器),2)只需执行以下操作:success:showPage(如果您发现我的答案很有用,请不要忘记将其标记为最佳答案)好运气1)对于事件侦听器要侦听成功事件,它必须轮询url。url将返回200(成功)或400(失败)取决于任务的状态。那么它多久轮询一次以获得状态???2)哦,好的。你的ans肯定会有帮助:)。我已经投票了,但我的投票还没有计算出来,因为我是一个新的bie。@codeaprendiz每次你调用函数poll1 IT时,用你的话来说,它都会检查一次,但是如果你想每x秒发送一次请求并执行同样,您应该反复使用setIntervalSo这不是一种检查任务状态的好方法,因为它违背了轮询的目的。如果您可以举一个setInterval的例子,它通过每秒轮询一次,初始延迟为固定秒(如5)来实现这一点,那将非常好。)