要解決ajax跨域問題,網上給出的方法有二:
1是構建服務器端的代理。簡而言之,就是ajax中調用的實質還是本機的url,而服務器端替js去取回遠端地址。
2.利用script標記,生成一個標簽。在js加載完成后,再執行后續操作。
就是將原來新建xmlhttprequest對象的操作改成了新建script標簽的操作.
這里給出一個例子:
#ajah.js
var ajah=function(url,varname,handlesuccess,handlefailure){
/**
* handlesuccess,handlefailure must be functions
* */
script = document.createelement("script");
script.src=url;
var handler = function(str)
{
handlesuccess(str);
}
script.onload = function()
{
var json=eval(varname);
handler(json);
}
if(window.ie)
{
script.onreadystatechange = function()
{
if(script.readystate=='complete'||script.readystate== 'loaded')
{
var json=eval(varname);
if(typeof json != 'undefined')
{
handler(json);
}
}
}
}
document.body.appendchild(script);
}
而在網頁中應這樣調用:
#demo.html
<pre>
<!doctype html public "-//w3c//dtd html 3.2//en">
<html>
<head>
<meta name="generator" content=
"html tidy for linux (vers 1 september 2005), see www.w3.org">
<title></title>
<script src="mootools.js"></script>
<script src="ajah.js"></script>
</head>
<body>
<script>
var ajah=new ajah("data.js","json198",function(str){
console.debug("returned:");
console.debug(str);
},
function(str){});
</script>
</body>
</html>
</pre>
被調用的數據文件如下
#data.js
var json198="hello,this is json198";
funciton ajah(url,varname,handlesuccess,handlefailure){…}
ajah這個構造函數調用四個參數:
url:遠端地址
varname:遠端返回數據的變量名
handlesuccess:加載完畢后加載的函數
handlefailure:暫時沒用上
新聞熱點
疑難解答
圖片精選