我曾经是程序员,但现在定期执行“脚本编写”。我正在尝试创建一个基于Ajax的游戏。
我有一个带有以下javascript的.php文件:
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.SML.HTTP");
}
然后每当我想要使用我的请求时,例如:
if ( XMLHttpRequestObject ) {
XMLHttpRequestObject.open("GET","gameinfo.php?cmd=setgame&game=" + arg);
XMLHttpRequestObject.onreadystatechange = function() {
// handler ...
}
XMLHttpRequestObject.send(null);
}
我不明白为什么在引用它之前我总是需要确保XMLHttpRequest对象存在。我没有创造它吗?怎么可能不存在?这只是一个很好的编码实践还是存在一些真正的风险?
好的,我确信尝试jQuery。但如果我坚持使用纯JavaScript,这会安全吗?
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.SML.HTTP");
} else {
alert("Sorry but it looks like this game won't work in your browser.");
}
然后每当我想要使用我的请求时,例如:
XMLHttpRequestObject.open("GET","gameinfo.php?cmd=setgame&game=" + arg);
XMLHttpRequestObject.onreadystatechange = function() {
// handler ...
}
XMLHttpRequestObject.send(null);
答案 0 :(得分:1)
您的IF的结构方式,逻辑上有一些潜力可供您不创建任何内容。基本上你正在寻找window.XMLHttpRequest是否存在或者是IF window.ActiveXObject存在,你创建你的请求对象。但如果这些实例都不存在,那么你什么也得不到。
所以,或许更好的检查是事后检查以提醒用户“嘿,我似乎找不到任何类型的XMLHttpRequestObject,所以我从这里做不了多少。”。< / p>
什么时候会发生这种情况?打败我,但简单的事实是你的逻辑布局方式,它可能会发生。
答案 1 :(得分:1)
刚开始就在这里:使用jQuery它会将糟糕的跨浏览器兼容性抽象为糟糕的东西。
第一个代码块用于特征检测,因为IE处理XMLHttpRequest
与其他浏览器不同,您需要找出要使用的对象。
检查是否存在兼容性代码(if (window.XMLHttpRequest) {...
内容)错过案例的可能性,否则您将收到令人讨厌的错误。
我会重复自己,因为这非常重要,请使用jQuery。它是那里最强大的JavaScript库。例如,您要执行的请求是
$.get("gameinfo.php",
{cmd: "setgame", game: arg},
function () {
//Success function
}
);
它可以透明地处理所有跨浏览器的内容并且正常工作。 (如果你需要它们,jQuery上还有更多深入的功能)
答案 2 :(得分:0)
这两种情况都可能是错误的。
但是如果你正在创建一个基于ajax的游戏,我真的鼓励你查看jquery或其他js框架......
实际上,几年前我做的完全一样。我开始使用原始javascript从头开始构建一个ajax游戏。然后我发现了jQuery ......它的学习速度非常快。
答案 3 :(得分:0)
如果存在,您希望如何追赶它?你确定它会100%创建吗?检查所有浏览器?检查所有可能性?
答案 4 :(得分:0)
这可能会有所帮助。您检查XMLHttpRequest是否存在,以便可以使用更旧的连接到服务器的数据。注意:我注意到,如果您经常调用Jquery AJAX,它们似乎会更加一致地工作。如果您将其大量开除,它会随机散开。
var xmlHttp = null;
if (window.XMLHttpRequest) { //typeof XMLHttpRequest !== 'undefined'
xmlHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
var versions = [
"MSXML2.XmlHttp.6.0",
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xmlHttp = new ActiveXObject(versions[i]);
break;
} catch (e) {
}
}
}
if (xmlHttp != null) {
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var data = JSON.parse(xmlHttp.responseText);
s_DateNow = data;
dt_Now = new Date(data);
}
}
xmlHttp.onerror = function () {
}
xmlHttp.open("POST", "/Home/ServerDate/", true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send('__RequestVerificationToken=' + sToken);
}
else {
document.getElementById("spParkingTracker").innerHTML = "Browser not supported!";
}