之前一直沒有深入研究過ajax跨域實現的問題,最近研究ext發現他的例子裡可以請求遠端頁面,它的方法叫scrīptTag。其實就是使用動態載入js指令碼的方式來實現的。
轉一個文章過來,具體就不寫了,ext是通過傳一個callbak方法動伺服器頁面,在返回結果中加上執行 callbak方法,總得來說伺服器代碼還要自己可以控制,如果完全想讀別人的資料還是做不到。
作者:zhanglp888
用json和scrīpt標籤,解決ajax的跨域問題
ajax的XMLHttpRequest因為js的安全問題是不能跨域的
但是<scrīpt></scrīpt>可以用src=”http://otherSite.com/a.js”可以跨域
所以動態寫入一個<scrīpt></scrīpt>就OK了
scr指向一個其它網站的檔案,比如:a.php?id=15
讓a.php echo() 一個json的字串
json 參考:http://www.json.org
下面為動態載入scrīpt標籤的js
Javascrīpt代碼
1. <scrīpt>
2.
3. var element = document.createElement(“scrīpt”);
4.
5. function createscrīpt(compId,dataId){
6. element.src = “http://othersite.com/json.php?comp_id=” + compId + “&data_id=” + dataId + “”;
7. element.type = “text/javascrīpt”;
8. element.language = “javascrīpt”;
9. }
10.
11. function writeContent(){
12. alert(productJSON.product[0].name);
13. }
14.
15. window.onload = function(){
16. createscrīpt(1,2);
17. document.getElementsByTagName(“head”)[0].appendChild(element);
18. }
19.
20. if(document.all){
21. element.onreadystatechange = function(){//IE用
22.
var state = element.readyState;
23.
if (state == “loaded” || state == “interactive” || state == “complete”) {
24. writeContent();
25. }
26. };
27.
28. } else {
29. element.onload = function() {//FF用
30. writeContent();
31. };
32. }
33.
34.
35. </scrīpt>
下面是json.php echo出來的內容
var productJSON = {’product’: [
{’name’ : ‘物件名1′},
{’building’ : ‘建物名1′},
{’address’ : ‘5′}
]
};