浏览 5314 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-18
最后修改:2008-12-18
装了好几个都不兼容最新FF,版本兼容一直是开发人员最头疼的问题。下面是我刚刚找到的支持最新FF的地址。 URL:http://getfirebug.com/releases/firebug/1.4/ 随便附上教程:http://www.ruanyifeng.com/blog/2008/06/firebug_tutorial.html 还有我未调试成功的JS,呵呵 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <div id="result"></div> <script> var _timeout; function wqwAjax(sendurl,result,type){ //var _timeout; var type=type; var result=result; createXmlHttpResquest.call(this); this.startSend=function(){ xmlHttp.onreadystatechange = callHandler; document.getElementById(result).innerHTML="<font color='green'>"+type+"</font>";//up xmlHttp.open("post", sendurl, true); xmlHttp.send(null); } function callHandler(){ if(xmlHttp.readyState==1){ circling(); } if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ var value=xmlHttp.responseText; stopTimeout(); document.getElementById(result).innerHTML=value; } } } function circling(){ var resultObj=document.getElementById(result).childNodes[0]; var resultValue=document.getElementById(result).childNodes[0].innerHTML if(resultValue.length<=type.length+3){ document.getElementById(result).childNodes[0].innerHTML=resultValue+"."; }else if(resultValue.length>resultObj.length+3){ document.getElementById(result).childNodes[0].innerHTML=type+"."; } _timeout=setTimeout("circling()",500); alert(document.getElementById(result).childNodes[0].innerHTML) } function stopTimeout(){ clearTimeout(_timeout); } } wqwAjax.prototype=new createXmlHttpResquest(); function createXmlHttpResquest(){ this.xmlHttp; if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); if (xmlHttp.overrideMimeType) { xmlHttp.overrideMimeType("text/xml"); } } else { if (window.ActiveXObject) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } } } var ajax=new wqwAjax("http://www.baidu.com","result","call"); ajax.startSend(); </script> </BODY> </HTML> 我的目的是调用var ajax=new wqwAjax("telMeeting.do","result","call"); ajax.startSend();来打电话,发短信等。此JS具有通用功能。由于项目中AJAX用得少,所以没用框架。问了fins胖哥,结果他半天还不知道我的意图。一般的人一运行代码,就应该知道了吧,晕了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-18
有两个地方错误:
_timeout=setTimeout("circling()",500); // circling 函数是函数 wqwAjax 内部的一个变量,从 window 对象外不可访问,事实上这种错误是无法调试的 2. var ajax=new wqwAjax("http://www.baidu.com","result","call"); // 不能跨域访问
根据你的想法,按照我的习惯重构了一下。两个文件:1. test.html 发起请求的页面;2. content.html 被请求的页面
test.html 的内容如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>XMLHttpRequest demo</title> <script type="text/javascript"> // 创建并返回一个 XMLHttpRequest 对象 function createXmlHttpResquest(){ var xmlHttp; if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); if(xmlHttp.overrideMimeType){ xmlHttp.overrideMimeType('text/xml'); } }else{ if(window.ActiveXObject){ try{ xmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e){ try{ xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch(e){} } } } return xmlHttp; } function AjaxPanel(container, loadingMsg){ var c = container.tagName ? container : document.getElementById(container); var xmlHttp = createXmlHttpResquest(); var onStateChange = function(){ if(xmlHttp.readyState == 4){ clearInterval(msgTimer); if(xmlHttp.status == 200){ // 需要在 IIS 等环境下测试,否则永远不会是 200 c.innerHTML += '<br /><div style="background-color:#eee; border:1px solid #666;">' + xmlHttp.responseText + '</div>'; }else{ c.innerHTML += '<br /><div style="background-color:#eee; border:1px solid #666; color:Red;">Request fail!</div>'; } } } var msgTimer; var updateMsg = function(){ var extra = c.firstChild.innerHTML.substring(loadingMsg.length); c.firstChild.innerHTML = loadingMsg + (!extra ? '.' : (extra == '.' ? '..' : (extra == '..' ? '...' : ''))) } return { request: function(method, url, data){ c.innerHTML = '<font color="green">' + loadingMsg + '</font>'; xmlHttp.open(method, url, true); xmlHttp.onreadystatechange = onStateChange; xmlHttp.send(data); // 可以将此行注释掉观察 loadingMsg msgTimer = setInterval(updateMsg, 500); } } } window.onload = function(){ myPanel = new AjaxPanel('c', 'loading'); myPanel.request('GET', 'content.html', null); } </script> </head> <body> <div id="c"></div> </body> </html>
content.html 的内容如下: AJAX CONTENT
测试的时候需要真实的运行环境
|
|
返回顶楼 | |
发表时间:2008-12-18
jiangshaolin 写道 ... ... 我的目的是调用var ajax=new wqwAjax("telMeeting.do","result","call"); ajax.startSend();来打电话,发短信等。此JS具有通用功能。由于项目中AJAX用得少,所以没用框架。问了fins胖哥,结果他半天还不知道我的意图。一般的人一运行代码,就应该知道了吧,晕了。 我现在也没明白 你那几个短消息是让我帮你实现某个功能 还是让我帮你修改现有代码的bug. 看来是我笨了 或者 我也许真的不是一般人 |
|
返回顶楼 | |
发表时间:2008-12-19
fins 写道 jiangshaolin 写道 ... ... 我的目的是调用var ajax=new wqwAjax("telMeeting.do","result","call"); ajax.startSend();来打电话,发短信等。此JS具有通用功能。由于项目中AJAX用得少,所以没用框架。问了fins胖哥,结果他半天还不知道我的意图。一般的人一运行代码,就应该知道了吧,晕了。我现在也没明白 你那几个短消息是让我帮你实现某个功能 还是让我帮你修改现有代码的bug. 看来是我笨了 或者 我也许真的不是一般人 胖哥可能是太忙了,来不及回答我吧,呵呵 |
|
返回顶楼 | |
发表时间:2008-12-19
walkman 写道 有两个地方错误: 1. Js代码 _timeout=setTimeout("circling()",500); // circling 函数是函数 wqwAjax 内部的一个变量,从 window 对象外不可访问,事实上这种错误是无法调试的 _timeout=setTimeout("circling()",500); // circling 函数是函数 wqwAjax 内部的一个变量,从 window 对象外不可访问,事实上这种错误是无法调试的 2. Js代码 var ajax=new wqwAjax("http://www.baidu.com","result","call"); // 不能跨域访问 var ajax=new wqwAjax("http://www.baidu.com","result","call"); // 不能跨域访问 你的代码写得很棒 ,向你学习. 但有几个疑问, 引用 从 window 对象外不可访问 照你说的,那function 里面的function 就没用了?还有,我把你的URL改成www.baidu.com也可以,跨域其实是可以的,明天我会把我改正后的代码附上来.
|
|
返回顶楼 | |
发表时间:2008-12-20
window.setInterval(code, interval) return timerId(int)
window.setTimeout(code, delay) return timerId(int) 这两个方法中的 code 参数,IE4以前只支持字符串代码,IE4以后支持函数 我的理解: 当 code 为字符串的时候,执行的时候相当于 window.eval(code),code 中的变量要在 global 对象下可见,很明显你的 circling 方法在 global 下是不可见的,所以执行会失败 当 code 为函数时,Window 对象通过某种映射机制(timerId?)将该方法“变成”它的一个方法,执行的时候相当于 window.code()。这也就是在 code 方法体内 this 指针永远指向 Window 对象,当然 code 所在的 scope 内的变量还是照样可以使用的。 很明显当 code 为一个函数的时候运用比较灵活,因为它可以是一个闭包,可以使用它所在的 scope 中的临时变量 "function 里面的function 就没用了?" -- 怎么会没用??用处大了。function 里面的 function 在设计类的时候相当与一个 C++,JAVA 中的一个私有方法,外界无法直接访问,必须要经过公开的方法。如我写的 AjaxPanel 类中,所有 var 定义的都是私有变量,return{} 返回的都是公有的方法或属性,对私有变量的访问必须要通过公有方法或属性 关于跨域。IE 下没问题,Firefox 不行,Firefox 中测试的时候会报没有权限。如果要跨域访问,建议在服务端通过 web 服务跨域访问资源或数据,成功后将结果返回给客户端 |
|
返回顶楼 | |
发表时间:2008-12-20
walkman 写道 window.setInterval(code, interval) return timerId(int) window.setTimeout(code, delay) return timerId(int) 这两个方法中的 code 参数,IE4以前只支持字符串代码,IE4以后支持函数 我的理解: 当 code 为字符串的时候,执行的时候相当于 window.eval(code),code 中的变量要在 global 对象下可见,很明显你的 circling 方法在 global 下是不可见的,所以执行会失败 当 code 为函数时,Window 对象通过某种映射机制(timerId?)将该方法“变成”它的一个方法,执行的时候相当于 window.code()。这也就是在 code 方法体内 this 指针永远指向 Window 对象,当然 code 所在的 scope 内的变量还是照样可以使用的。 你对JS理解得太深了,好深奥。 我昨天修改后的代码: function createXmlHttpResquest(){ var xmlHttp; if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); if (xmlHttp.overrideMimeType) { xmlHttp.overrideMimeType("text/xml"); } } else { if (window.ActiveXObject) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } } return xmlHttp; } function circle(result,show){ var v=document.getElementById(result).childNodes[0].innerHTML; if(v.length<=show.length+3){ document.getElementById(result).childNodes[0].innerHTML=v+"."; }else{ document.getElementById(result).childNodes[0].innerHTML=show+"."; } } function shows(result,show){ var interval=setInterval("circle('"+result+"','"+show+"')",500); return interval; } var wqwAjax=function(result,show){ this.result=result; this.show=show; } function sendUtil(){ this.send=function (url){ document.getElementById(this.result).innerHTML="<font color='green' size=15 style='display: inline'>"+this.show+"</font>" this.interval=shows(this.result,this.show); //AJAX请求 this.xmlHttp=createXmlHttpResquest(); callHandler.prototype.interval="interval"; var parent=this; var rs=this.result; var xml=this.xmlHttp; this.xmlHttp.onreadystatechange=function(){callHandler(parent,xml,rs)}; this.xmlHttp.open("post",url , true); this.xmlHttp.send(null); } var callHandler=function(obj,xml,rs){ if(xml.readyState<4){ } if(xml.readyState==4){ clearInterval(obj.interval); if(xml.status==200){ var value=xml.responseText; //alert(document.getElement("result")); document.getElementById(rs).innerHTML=value; } } } } wqwAjax.prototype=new sendUtil(); 和你的差不多了。 |
|
返回顶楼 | |
发表时间:2008-12-20
walkman 写道 function createXmlHttpResquest(){ var xmlHttp; if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); if (xmlHttp.overrideMimeType) { xmlHttp.overrideMimeType("text/xml"); } } else { if (window.ActiveXObject) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } } return xmlHttp; } function circle(result,show){ var v=document.getElementById(result).childNodes[0].innerHTML; if(v.length<=show.length+3){ document.getElementById(result).childNodes[0].innerHTML=v+"."; }else{ document.getElementById(result).childNodes[0].innerHTML=show+"."; } } function shows(result,show){ var interval=setInterval("circle('"+result+"','"+show+"')",500); return interval; } var wqwAjax=function(result,show){ this.result=result; this.show=show; } function sendUtil(){ this.send=function (url){ document.getElementById(this.result).innerHTML="<font color='green' size=15 style='display: inline'>"+this.show+"</font>" this.interval=shows(this.result,this.show); //AJAX请求 this.xmlHttp=createXmlHttpResquest(); callHandler.prototype.interval="interval"; var parent=this; var rs=this.result; var xml=this.xmlHttp; this.xmlHttp.onreadystatechange=function(){callHandler(parent,xml,rs)}; this.xmlHttp.open("post",url , true); this.xmlHttp.send(null); } var callHandler=function(obj,xml,rs){ if(xml.readyState<4){ } if(xml.readyState==4){ clearInterval(obj.interval); if(xml.status==200){ var value=xml.responseText; //alert(document.getElement("result")); document.getElementById(rs).innerHTML=value; } } } } wqwAjax.prototype=new sendUtil(); |
|
返回顶楼 | |
发表时间:2009-01-11
跨域,请使用jsonp来进行。不知道你是跨子域还是完全不同的域名。如果跨子域还可以用命名空间解决,完全不同的域名只能用jsonp比较好办。
|
|
返回顶楼 | |
发表时间:2009-01-11
jsnjlc 写道 跨域,请使用jsonp来进行。不知道你是跨子域还是完全不同的域名。如果跨子域还可以用命名空间解决,完全不同的域名只能用jsonp比较好办。
刚刚Google了一下,还可以,以后还想对JS深入理解. |
|
返回顶楼 | |