14 July 2006
This post may be outdated due to it was written on 2006. The links may be broken. The code may be not working anymore. Leave comments if needed.
Ajax 不能调用跨域名的脚本,mm, XML.com 介绍了三种解决方案,两种 proxy 方案,比较容易设置。另一种就是 On-Demand Javascript 方案。

On-Demand Javascript 讲起来比较简单,但是写起来比较复杂。
简单的讲是,在当前的 page 里用 javascript 制造一个 script 标签,然后给一个 src (可以是 cross-domain 的)。然后在这个远程的 src 地址中输出 text/javascript 的东西。比如定义 var response = 'test'; 什么的。最后在 page 的 div 里显示这个 var respose
在 XML 的 Fixing AJAX: XMLHttpRequest Considered Harmful 中给出的例子里,在 Firefox 我测试的时候是有点错误的:
    if (BROWSER_IS_IE) {
if (oScript.readyState == "loaded") {
eval(callback);
oScript.onreadystatechange = null;
} else {
oScript.onreadystatechange = CheckAgain;
}
// All other web browsers just do the callback function
} else {
eval(callback);
}
这里的 eval(callback) 要调用 src 文件传来的变量如 var response, 但问题是这个 src 传递的很慢(服务端的程序总比客户端的慢)时,Firefox 会报错,response not defined 这样的错误。然后过一会儿传过来了就不会错了。 IE 上因为用了 if (oScript.readyState == "loaded") 这样在确定了 script 被载入后才 eval(callback) 就不会出错了。

我解决的方案是在这个 src 的文件中,比如 perl 文件中写点类似 $('divname').innerHTML = $result_value_from_perl;这样的 javascript 代码,而不用定义一个 var response 然后用 javascript 更新 divname.innerHTML. 在 Perl 代码中直接写能避免不同步的问题。

好象说的比较乱。但目前人的状态也很乱。整天忙得不得了。


blog comments powered by Disqus