要解決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:暫時沒用上