我的AJAX遇到了这个问题,它在IE中不起作用,但它在FF中工作。我从w3schools网站上获得了以下大部分代码,所以我不明白为什么会出错。谁能帮我吗?
<script type="text/javascript">
function checkRefresh(str)
{
if (str=="") {
document.getElementById("lastCallID").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
if (document.getElementById("lastCallID").innerHTML < xmlhttp.responseText) {
GoPopUp();
} else {
setTimeout('checkRefresh()',15000)
}
}
}
xmlhttp.open("GET","getnewid.php",true);
xmlhttp.send();
}
</script>
谢谢!
编辑:据我所知,它不适用于IE6 -8。基本上这个想法是,ajax调用一个运行php页面的脚本,该页面获取数据库中的最新ID。然后它将php页面的ID与主页面上的ID进行比较。如果来自Ajax请求的ID大于页面上的ID,则它启动一个函数,该函数启动jquery弹出窗口以警告用户存在新的数据库条目并为其提供刷新选项。在IE 6,7,8中弹出窗口永远不会启动,所以我只能想象ajax无法正常工作以获取新ID。当我调用它时,刷新功能起作用,这就是为什么我认为这是问题的ajax。但是如果你很好奇,这里是GoPopUp函数var GoPopUp = function(){
$('#PopNewCall').fadeIn('slow');
PageRefreshTimer();
}
//Function which refreshes page after a certain number of seconds with no user Inputs
var PageRefreshTimer = function(){
setTimeout("location.reload(true);",30000); //1,000 = 1 second
}
//Function which refreshes page after user has clicked refresh
var RefreshNow = function(){
setTimeout("location.reload(true);",0);
}
答案 0 :(得分:1)
这是我喜欢用来跨浏览器获取XMLHttpRequest对象的函数。
function getRequestObject() {
var options = [
function () { return new XMLHttpRequest() },
function () { return new ActiveXObject("Microsoft.XMLHTTP") },
function () { return new ActiveXObject("Msxml2.XMLHTTP.6.0") }
];
for (var i = 0, il = options.length; i < il; i++) {
try { return options[i]() } catch(e) {}
}
}
var xhr = getRequestObject();
if (!xhr) { return; } // :(
// use xhr here
xhr.open("GET", "/foo/bar");
答案 1 :(得分:0)
我没有看到代码中的失败,但是:有没有理由不使用其中一个优秀的现有框架,例如twobirds,jquery,mootools或{ {3}}做ajax-stuff?如果你试图自己写这个,支持所有浏览器(或至少是大的浏览器),你将会陷入困境并花费大量时间(可以用来开发或改进其他东西的时间)
编辑:作为您评论的答案:我不知道您正在尝试做什么,但看起来您定期将'getnewid.php'重新命名为'lastCallID' 。它会是这样的(不知道'GoPopUp()'是什么,只是在这种情况下每次更新后调用它):
var refreshInterval = setInterval(function() {
$('#lastCallID').load('getnewid.php', function(){ GoPopUp(); });
}, 15000);
答案 2 :(得分:0)
编辑:对不起,我想将此作为对Catie回复的评论发布,但作为新用户,我没有足够的“声誉”积分。尽管如此,我相信大多数人会同意我的评论的有效性。
@catie,作为开发人员,我们都有IE的问题,但教师指导学生“不要乱用IE”似乎很奇怪,因为这对于为现实世界做好准备没什么作用。
现实是IE不会很快消失,在6/7/8版本之间,它们仍然拥有全球超过50%的市场份额。作为最佳实践,最好确保您的站点/代码在所有浏览器中按预期工作,就像@august解决方案/建议一样。
答案 3 :(得分:0)
对于一个简单的跨浏览器解决方案,我建议使用jQuery 可以在http://api.jquery.com/jQuery.ajax/
找到jQuery AJAX API答案 4 :(得分:-2)
您是否必须在IE上提交作业?我们的老师(当我参加相关的类似课程时)要求我们不要理会IE,因为很多事情都不起作用。尝试刷新浏览器或其他内容。