关于 Ajax 交互提交时的相对URL错误 及setTimeout 传递参数的误解
在项目一级目录下的一个文件需要即时取值,Right.aspx,我在该页面下引用了GetMessageAjax.js文件.
该文件放在与Right.aspx同级的文件夹JS下面. 请看.js文件的内容
var xmlHttp;
var oDiv; function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest;
}
}
function GetContent(objContentDiv,strWhere) {
if (objContentDiv==null)
objContentDiv=oDiv;
else oDiv=objContentDiv;
createXMLHttpRequest();
var url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date()); xmlHttp.open('GET',url,true); xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readystate ==4 ) { if (xmlHttp.status ==200 )
{
var content; content=xmlHttp.responseXml.getElementsByTagName("NewMessage")(0).firstChild.xml;//xmlHttp.responseXml.getElementsByTagName("NewMessage")[0].firstChild.data;
objContentDiv.innerHTML=content; setTimeout(GetContent, 3000,objContentDiv,strWhere);
}
}
}
xmlHttp.send(null);
}
其中的url var url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());
Assistant是一级文件夹,也就是与Right.aspx和JS同级。郁闷的是我一直以为这个相对路径是相对于当前的.js文件的路径,那么这样理解的话就得到了上面的地址:url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date()); xmlHttp.open('GET',url,true);
可试了N久也不能连接到该页面.后来索性把url改成"http://localhost/XXX/Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());可以连接到页面了。
这就得出是路径错误的原因. 郁闷了老半天把路径改成url="Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());
成功了.
哈..........原来是我理解的相对路径的有误.
该相对路径的意思是相对于调用页面的路径.而不是我以前所理解的相对于.js文件的路径!
哈哈.被一个相对路径害得浪费了大半晚上的时间.也许只有偶一个笨人犯这种低级错误哦.不过还是写在这里等我下次再犯错的时候可以查阅
^_^!
下面是我之前的错误代码设置 setTimeout的
setTimeout("GetContent(objContentDiv," + strWhere + ")", 10000);
呵呵.奇怪的是以上的代码objContentDiv是一个对像...好神奇哦.
后来试着把 setTimeout(GetContent, 3000,objContentDiv,strWhere); 参数放在后面,
哇.成功啦. 不过还有一个小问题,暂没找到原因的
.就是三秒后,执行GetContent()函数时objContentDiv对像变undifine了.
嘿嘿.因为在这小段代码上浪费时间太多了.自己都不好意思再浪费时间去找原因了.
暂时的解决方法是定义一个全局变量oDiv,然后在objContentDiv有值的时候赋其值给oDiv.
问题虽然是解决了.但不爽.留待以后查明原因........
嘿嘿.如果你知道原因,望不吝赐教~!
该文件放在与Right.aspx同级的文件夹JS下面. 请看.js文件的内容
var xmlHttp;
var oDiv; function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest;
}
}
function GetContent(objContentDiv,strWhere) {
if (objContentDiv==null)
objContentDiv=oDiv;
else oDiv=objContentDiv;
createXMLHttpRequest();
var url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date()); xmlHttp.open('GET',url,true); xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readystate ==4 ) { if (xmlHttp.status ==200 )
{
var content; content=xmlHttp.responseXml.getElementsByTagName("NewMessage")(0).firstChild.xml;//xmlHttp.responseXml.getElementsByTagName("NewMessage")[0].firstChild.data;
objContentDiv.innerHTML=content; setTimeout(GetContent, 3000,objContentDiv,strWhere);
}
}
}
xmlHttp.send(null);
}
其中的url var url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());
Assistant是一级文件夹,也就是与Right.aspx和JS同级。郁闷的是我一直以为这个相对路径是相对于当前的.js文件的路径,那么这样理解的话就得到了上面的地址:url="../Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date()); xmlHttp.open('GET',url,true);
可试了N久也不能连接到该页面.后来索性把url改成"http://localhost/XXX/Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());可以连接到页面了。
这就得出是路径错误的原因. 郁闷了老半天把路径改成url="Assistant/GetNewMessage.aspx?Where=" + escape(strWhere) + "&t=" + escape(Date());
成功了.
哈..........原来是我理解的相对路径的有误.
该相对路径的意思是相对于调用页面的路径.而不是我以前所理解的相对于.js文件的路径!
哈哈.被一个相对路径害得浪费了大半晚上的时间.也许只有偶一个笨人犯这种低级错误哦.不过还是写在这里等我下次再犯错的时候可以查阅
^_^!
下面是我之前的错误代码设置 setTimeout的
setTimeout("GetContent(objContentDiv," + strWhere + ")", 10000);
呵呵.奇怪的是以上的代码objContentDiv是一个对像...好神奇哦.
后来试着把 setTimeout(GetContent, 3000,objContentDiv,strWhere); 参数放在后面,
哇.成功啦. 不过还有一个小问题,暂没找到原因的
.就是三秒后,执行GetContent()函数时objContentDiv对像变undifine了.
嘿嘿.因为在这小段代码上浪费时间太多了.自己都不好意思再浪费时间去找原因了.
暂时的解决方法是定义一个全局变量oDiv,然后在objContentDiv有值的时候赋其值给oDiv.
问题虽然是解决了.但不爽.留待以后查明原因........
嘿嘿.如果你知道原因,望不吝赐教~!
浙公网安备 33010602011771号