2013-11-22 48 views
1

我遇到了以下javascript问题。我正在使用jQuery框架。JavaScript承诺和setInterval难点

此代码首次正常工作,正确显示日期,温度和湿度,但第二次运行时出现此错误消息;

未捕获的SyntaxError:意外的标识符

下面是代码;

var gettingTemperature = $.post("/get_temperature.php"); 

setInterval(gettingTemperature, 5000); 

gettingTemperature.then(function (data) { 

     $('#date').text(data.date); 
     $('#temperature').html(data.temperature + "℃"); 
     $('#humidity').text(data.humidity + "%"); 

    }, function() { 
     console.log('Unable to access temperature model'); 
    } 
); 
+0

我有christiandev,我找不到问题。 –

回答

4

gettingTemperature并不代表调用$ .POST(),而是调用$ .POST(的结果),这是jqXHR对象

的setInterval期望的功能参考作为第一参数,但你交出jqXHR对象。这就是为什么你运行$。员额()一次(与第一行)和setInterval失败

var gettingTemperature = function { 
    $.post("/get_temperature.php").then(function (data) { 

     $('#date').text(data.date); 
     $('#temperature').html(data.temperature + "℃"); 
     $('#humidity').text(data.humidity + "%"); 
    }, function() { 
     console.log('Unable to access temperature model'); 
    }); 
}; 

gettingTemperature(); 
setInterval(gettingTemperature, 5000); 
+0

**温度**承诺?我教过我可以从ajax调用中创建一个承诺,然后多次运行它。 –

+0

Promise无法运行。是的,jqXHR实现Promise接口,因此“是”Promise – devnull69

+0

谢谢你的帮助。 –

1

你应该通过一种方法为setInterval,但你传递一个承诺。通常在这种情况下,您只需将成功或失败功能传递给$.post调用,但如果您确实需要使用该承诺,那也没关系。由于您不知道$.post调用何时会返回(即需要多长时间),因此您不应使用setInterval,因为如果花费的时间比间隔长,则最终可能会有多个并发请求,而且不是很有用。

大多数人在这种情况下所做的是等到第一个$.post请求结束时,然后在complete处理程序中再次调用$.post。这样你一次只能有一个请求。

+0

谢谢你的帮助。 –

+0

我不想用请求泛滥我的服务器。在再次调用$ .post之前,如何让完整的处理程序等待一段时间? –

+0

使用'setTimeout'。它与'setInterval'函数类似,但它只执行一次提供的函数。 –