|
锁定老贴子 主题:[请教]关于AJAX的几个问题
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2005-05-08
最近看了一些关于AJAX方面的文章,有问题想请教一下
1。关于javascript和server side的交互问题,有些解决方法就是直接使用xml文档,有些用把一个特殊的字串转换为JS对象和java对象的方式,因为我没有什么实践经验,想请教一下有这方面经验的同学具体是如何使用的。不过感觉上直接使用xml美观一些,但就是要在所有的应用接口上加一个proxy 2。看到前文有说使用xslt的模版处理xml的话题,不知道在JS的客户端如何调用转换的函数? 3。关于动态刷新数据的例子,我只看到在html的标签上加载了onload=fundction()的代码,但实际得到的效果确是客户端的JS在隔一段时间反复call那个function,不知道原理如何? PS. [code:1] <html> <head> <script type="text/javascript"> var isIE = false; var req; var messageHash = -1; var targetId = "1"; function initRequest(url) { if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { isIE = true; req = new ActiveXObject("Microsoft.XMLHTTP"); } } function checkForMessage() { var td1 = window.document.getElementById("td1"); td1.setAttribute("bgcolor","red"); window.status = "Checking for update for target " + targetId; var url = "timer?hash=" + messageHash + "&id=" + targetId; initRequest(url); req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(null); } // callback for the request function processReqChange() { if (req.readyState == 4) { if (req.status == 200) { var item = req.responseXML.getElementsByTagName("message")[0]; var message = item.firstChild.nodeValue; showDetail(message); messageHash = message; window.status = ""; } else { window.status = "No Update for " + messageHash + " status=" + req.status; } var td1 = window.document.getElementById("td1"); td1.setAttribute("bgcolor","white"); // restart the timer setTimeout("checkForMessage()", 10000); } } // display details retrieved from XML document function showDetail(message) { var idiv = window.document.getElementById("message"); idiv.innerHTML = ""; idiv.innerHTML = "<font size=+3>" + message + "</font>"; appendToSelect(message); messageHash = message; } function appendToSelect(message) { var select = window.document.getElementById("counterSelect"); var opt = document.createElement("option"); opt.value = message; opt.text = message; if (isIE) { select.add(opt); } else { select.appendChild(opt); } } </script> <title>Asynchronous Polling using Asynchronous JavaScript and XML (AJAX)</title> </head> <body onload="checkForMessage()"> <h1>Asynchronous Polling using Asynchronous JavaScript and XML (AJAX)</h1> <hr/> <p> This example shows how you can use AJAX to do server-side polling without to update page data without a page refresh. </p> <form name="checker"> <select size="7" type="text" id="counterSelect" name="value2"> <option id="empty">Nothing Yet</option> </select> </form> <table valign="center" height="60"> <tr> <td>The server counter is:</td> <td id="td1" width="100" bgcolor="white" border="2"> <div id="message">No Message Yet</div> </td> </tr> </table> </body> </html> [/code:1] 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2005-05-12
你说的转化不知道是不是指这个:
[code:1]var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0"); var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0"); var xslProc; xslDoc.async = false; xslDoc.load("sample2.xsl"); xslt.stylesheet = xslDoc; var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0"); xmlDoc.async = false; xmlDoc.load("books.xml"); xslProc = xslt.createProcessor(); xslProc.input = xmlDoc; xslProc.transform(); alert(xslProc.output);[/code:1] |
|
| 返回顶楼 | |
|
时间:2005-05-13
1 交互可以是任何方式,普通字符串可以,xml也行。不过限定于AJAX中的X, 用XML显得血统纯正;但并非离开XML就不能体现这个效果,实际上JSONRPC就是通过普通字符串(自己定义的格式)来序列化JAVA对象的。
2 楼上阐述已经比较全面了 3 之所以能够每隔一段时间反复调用那个程序,是这条语句的作用: setTimeout("checkForMessage()", 10000); 这句话表示10秒钟后调用checkForMessage方法,而在checkForMessage中又包含了对这句话的引用,因此……就不断的调用了 实际上,你给的例子相当低级,已经有相当成熟的AJAX库可供使用,例如jsonrpc, 还有buffalo jsonrpc: Google... buffalo: http://www.amowa.net/buffalo |
|
| 返回顶楼 | |
|
时间:2005-05-13
感谢楼上两位的回答,最近几天都在学习这个
1. 序列化的问题,JSON-RPC我看了是不错,不过目前来说我还是趋近于正统一些的做法,这块目前没有标准,但用XML我觉得应该是大趋势 2. 我原来的问题没有问清楚,我原来考虑的是是否能用JS来解析SOAP Message。找来找去,还是未果,谁有这方面的经验。后来又看了XML-RPC,好像client端也没有JS的library用 3.恩,看明白了,谢谢知道 buffalo是楼上写的吧,文档不够,嘿嘿,能再多介绍点想法吗? |
|
| 返回顶楼 | |
|
时间:2005-05-14
呵呵,我的想法可以从www.amowa.net和我的blog:
michael.nona.name上找到 |
|
| 返回顶楼 | |
|
时间:2005-05-16
windyboy 写道 后来又看了XML-RPC,好像client端也没有JS的library用 如果采用XML-RPC有很多JS的library可以用,用xmlrpc javascript可以搜到的。 如果考虑用Python调用buflap,那么可以考虑PyBurlap:http://wiki.woodpecker.org.cn/moin/PyBurlap,关于Buffalo的服务器端实现正在编写中:) |
|
| 返回顶楼 | |
|
时间:2005-05-17
这两天一直在研究JS的问题,因为我JS功底比较差,看起来不是很流畅
想问micheal一个问题,我看了JS的代码,看到类型的转换,但不明白怎么完成 java object的 obj.property -> script object obj.property的 关于PY不是很懂,嘿嘿,还是多谢指教 查了一下找到两个一个是js xmlrpc message builder 还有一个jsolait的组件库 |
|
| 返回顶楼 | |
|
时间:2005-05-17
刚才研读了一下BuffaloReply的代码,发现:
obj[BuffaloReply.getNodeText(attrs[i])] = this.deserialize(attrs[i+1]); 原来JS的object可以这样来。。。 这下看明白了 |
|
| 返回顶楼 | |
|
时间:2005-05-26
这两天作了一些测试
发现Buffalo的效率有些问题,我也不知道问题出在什么地方 好像是js client send以后,需要很长的时间才从服务器得到反馈 我观察服务器的执行情况速度很理想,不知在什么地方拖慢了时间 测试用一个测试对象,大概有10多个字段,每个字段60个字的长度左右 从客户端请求到页面被渲染完成花了3秒左右的时间 我用cross browser xmlhttprequest替换了原来的代码 用xmlw3cdom替换了dom的解析代码 响应依然不理想,是不是服务器端XML的转换效率不理想?原因不得而知 打算下午查查代码 再或者我试试看jsxmlrpc的东西hehe 顺便请教一下关于client widget的问题 因为以前一直没有注意过类似的东西,最近在恶补 首先看到的是 activewidget的东西,效果不错,但似乎那个东西都是直接write到document上的,我试图把它parse一下,但失败了,那个东西倒是用了OO的继承特性,还没有时间仔细看。 现在发现CSS很弱的我在找grid方面是有些问题。 本来找到了一个os3grid,很不错,不过它的column不能resize,也不是嵌入页面的那种形式 现在是改jude lib的东西,因为CSS的问题,进展不顺利,只是勉强可以用 不知道各位在这个方面有什么推荐? |
|
| 返回顶楼 | |
|
时间:2005-05-26
服务器端代码和客户端代码贴上来看看?
|
|
| 返回顶楼 | |








