2010-08-30 109 views
2

这适用于除IE以外的所有浏览器。我不知道为什么。它只是一个ajax时钟,可以在秒钟之间跳动。为什么jQuery代码不能在IE中工作?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Time Program Test</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 

<script type="text/javascript"> 
$(document).ready(function(){ 
    zone = 'Africa/Djibouti'; 
    ajaxTimeCall(zone, ajaxCallback); 
     }); 
function ajaxTimeCall(zone, callback) { 
$.ajax({ 
    type: 'get', 
    url: 'time.php', 
    context: this, 
    data: 'location=' + zone, 
    success: function (data){ 
    var dataSplit = data.split("."); 
    var isDST = dataSplit[1]; 
    var newTime = new Date(dataSplit[0]); 
    //console.log(newTime); 
    if(isNaN(newTime)) 
     { 
     $('#clock_input').val("Timezone Not Recognized"); 
     return; 
     } 
    $('#clock_input').val(newTime); 
    callback(isDST); 
    } 

    }); 
} 
function ajaxCallback(isDST) { 

    setTimeout("ajaxTimeCall(zone, ajaxCallback)", 1000); 
    if (isDST == 1) 
    $('.DST').removeClass('noshow'); 
} 
</script> 
<style type="text/css"> 
.noshow { display: none;} 
.DST {color: red; font-size: 14px;} 
</style> 
</head> 

<body> 
<h1> World Time Ajax Testing</h1> 
<span class="DST noshow">(DST)</span> 
<form name="test" action=""> 
<input id="clock_input" style="width: 175px; font-size: 14px;" type="text" value="Turn on Javascript" /> 
</form> 
</body> 
</html> 
+1

你的问题是你的问题:它的“在IE” – bradenkeith 2010-08-30 21:04:43

+2

您指定的Coult“不起作用”?会发生什么,以及这与预期的有何不同?你有任何错误信息? – Guffa 2010-08-30 21:10:35

+1

它如何“不起作用”? jQuery在IE中不能完全工作,但通常会比较干净地弃用。 – codersarepeople 2010-08-30 21:11:45

回答

2

我知道你已经用POST解决了这个问题,但也有另一种方法,使用the cache option for $.ajax()。如果设置为false,jQuery将追加时间戳的URL作为参数,迫使即使在IE中一个新的请求,你用这样的:

$.ajax({ 
    cache: false, 
    //current options you already have... 
}); 
0

应该不是你的代码是:

ajaxCallback(isDST); 

在阿贾克斯成功回调函数中ajaxTimeCall

如果您可以提供有关您所看到的错误的更多详细信息,那也有帮助。

+0

对不起,我想这将有助于知道我所看到的。它在IE中显示错误格式的错误时间。如果您在FF或Chrome或Safari中查看它,可以看到正确的时间。它看起来像从其他浏览器获取服务器数据的不同值。我不知道为什么格式不同,但。 此外,我认为回调名称是正确的,因为当我在document.ready节中调用ajaxTimeCall时,将ajaxCallback()函数传递到该回调名称中?那是不正确的? – gmills82 2010-08-31 18:04:37

1

更新! Wtf IE7 - AJAX calls using setTimeout这篇文章包含了我的问题的答案。 IE使用GET变量的缓存版本,因此每次AJAX调用php脚本时都不会更新时间。我将它改为POST,它像一个魅力。感谢所有的帮助家伙!

+0

检查这是答案:) – 2010-08-31 18:37:06

+0

进一步更新:有人提到在jquery的ajax调用中使用缓存选项。这就是我最终要做的。我将Post转回GET,并将缓存设置为false,并且工作正常。我也玩过在php头文件中设置缓存选项。 – gmills82 2010-09-02 10:47:22

相关问题