2012-06-15 61 views
2

我想要做的就是使用Ajax從另一個PHP文件中獲取時間。錯誤:Firefox元素列表「後丟失」

所以javascript代碼如下所示:

var timeNow = setInterval(
    $.ajax({ 
     url: "process/time.php", 
     success: function(msg) { 
      $('#time').text(msg); 
     } 
    }), 1000); 

而這裏的PHP代碼被髮布到。

<?php echo gmdate('h:i:s A', time() + 8 * 3600);?> 

任何想法?

回答

6

setInterval可以調用一個Function對象以及要執行的一串代碼。 $.ajax返回jqXHR對象,該對象被轉換爲字符串"[object Object]"。該字符串然後作爲代碼執行,並引發錯誤。

你想包裝在一個函數調用$.ajax

var timeNow = setInterval(function() { 
    $.ajax({ 
     url:"process/time.php", 
     success: function(msg) {$('#time').text(msg);} 
    }); 
}, 1000); 
+0

你也應該要麼指定數據類型或確保響應包括正確的內容類型標題:'頭(「Content-Type:text/plain」);' – Niko

1
var timeNow = setInterval(
    function() { // you missed function within setInterval() 
    $.ajax({ 
     url: "process/time.php", 
     success: function(msg) { 
      $('#time').text(msg); 
     } 
    }, 1000); 
1

一個更容易的解決辦法是以下幾點:

var timeNow = setInterval(
    function() { 
    $("#time").load("process/time.php"); 
    }, 1000); 

見jQuery的load()方法;它是爲這種事情設計的。

+1

這是不必要的錯誤,甚至是危險的,因爲負載將檢索到的值解釋爲HTML而不是文本。 – phihag

+1

是的,但提問者可以完全控制PHP文件,並返回一些非常簡單的東西。是的,它可能被惡意攔截和使用,但我懷疑一個簡單的時間應用程序會被劫持。 –

2
<?php 
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'){ 

    header('Content-Type: application/json'); 
    echo json_encode(array('server_time'=>gmdate('h:i:s A', time() + 8 * 3600))); 
    die;  
} 
?> 

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
<script> 
function polltime(){ 
    setTimeout(function(){ 
     $.ajax({ url: "./get_time.php", cache: false, 
     success: function(data){ 
      $("#time").replaceWith("<p id=\"time\">"+data.server_time+"</p>"); 
      polltime(); 
     }, dataType: "json"}); 
    }, 1000); 
} 
$(document).ready(function(){ 
    polltime(); 
}); 
</script> 


<p id="time"><?php echo gmdate('h:i:s A', time() + 8 * 3600);?></p> 
+0

+1使用'setTimeout'而不是'setInterval'。 – Engineer

-2
var timeNow = setInterval(
    $.ajax({ 
     url: "process/time.php", 
     success: function(msg) { 
      $('#time').html(msg); //you have to use html instead 
     } 
    }), 1000); 

做一個函數,並把你的代碼上並調用它<body onload"function_name();">

+0

您在'setInterval'內部缺少'function()' – Vimalnath

相關問題