论坛首页 AJAX版 AJAX

[请教]关于AJAX的几个问题

浏览 9822 次
该帖已经被评为精华帖
作者 正文
时间: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]
   
时间: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]
   
0 请登录后投票
时间: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
   
0 请登录后投票
时间:2005-05-13
感谢楼上两位的回答,最近几天都在学习这个

1. 序列化的问题,JSON-RPC我看了是不错,不过目前来说我还是趋近于正统一些的做法,这块目前没有标准,但用XML我觉得应该是大趋势

2. 我原来的问题没有问清楚,我原来考虑的是是否能用JS来解析SOAP Message。找来找去,还是未果,谁有这方面的经验。后来又看了XML-RPC,好像client端也没有JS的library用

3.恩,看明白了,谢谢知道

buffalo是楼上写的吧,文档不够,嘿嘿,能再多介绍点想法吗?
   
0 请登录后投票
时间:2005-05-14
呵呵,我的想法可以从www.amowa.net和我的blog:
michael.nona.name上找到
   
0 请登录后投票
时间: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的服务器端实现正在编写中:)
   
0 请登录后投票
时间:2005-05-17
这两天一直在研究JS的问题,因为我JS功底比较差,看起来不是很流畅

想问micheal一个问题,我看了JS的代码,看到类型的转换,但不明白怎么完成
java object的 obj.property -> script object obj.property的

关于PY不是很懂,嘿嘿,还是多谢指教
查了一下找到两个一个是js xmlrpc message builder 还有一个jsolait的组件库
   
0 请登录后投票
时间:2005-05-17
刚才研读了一下BuffaloReply的代码,发现:
obj[BuffaloReply.getNodeText(attrs[i])] = this.deserialize(attrs[i+1]);

原来JS的object可以这样来。。。
这下看明白了
   
0 请登录后投票
时间: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的问题,进展不顺利,只是勉强可以用
不知道各位在这个方面有什么推荐?
   
0 请登录后投票
时间:2005-05-26
服务器端代码和客户端代码贴上来看看?
   
0 请登录后投票
论坛首页 AJAX版 AJAX

跳转论坛:
JavaEye推荐