2012-06-15 60 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

相关问题