2013-11-22 49 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'函數類似,但它只執行一次提供的函數。 –