PHP下ajax跨域的解決方案之window.name實例分析
本文實例講述了PHP下ajax跨域的解決方案之window.name。分享給大家供大家參考,具體如下:
原理核心:window對象的name屬性是一個很特別的屬性,當該window的location變化,然后重新加載,它的name屬性可以依然保持不變。
依此原理,我們可以在頁面A中用iframe加載其他域的頁面B,而頁面B中用JavaScript把需要傳遞的數據賦值給 window.name,頁面A的iframe加載完成之后,頁面A修改iframe的地址,將其變成同域的一個地址,然后就可以讀出window.name的值了。
例:有兩個網站www.a.com和www.b.com,我們要在www.a.com/a.html下獲取www.b.com/data.html數據。
我們需要三個文件:
www.a.com 下的 a.html 獲取數據并顯示www.b.com 下的data.html 提供數據www.a.com 下的proxy.html 代理文件,與a.html同一域下,一般為空html文件。
www.b.com下的data.html如下:
<!DOCTYPE html><html><head> <meta charset='UTF-8'> <title>Insert title here</title></head><body> <script type='text/javascript'> //添加需要傳遞的數據,大小一般為2M,IE和firefox下可以大至32M左右 window.name = ’[{'name':'test1'},{'name':'test2'}]’; </script></body></html>
www.a.com下的proxy.html如下:
<!DOCTYPE html><html><head> <meta charset='UTF-8'> <title>Insert title here</title></head><body> <!-- 空的html文件 --></body></html>
www.a.com下的a.html如下:
<!DOCTYPE html><html><head> <meta charset='UTF-8'> <title>Insert title here</title></head><body> <!-- 用于引用www.b.com/data.html文件 --><iframe src='http://www.cgvv.com.cn/bcjs/7849.html'></iframe> <!-- 顯示獲取到的數據 --><div id='data'></div> <script type='text/javascript' src='http://www.cgvv.com.cn/bcjs/jquery.js'></script><script type='text/javascript'>var ifr = document.getElementById('iframe');ifr.src = 'http://www.b.com/data.html';if (ifr.attachEvent) { ifr.attachEvent('onload', loadfunc);} else { ifr.onload = loadfunc;} var state = 0;function loadfunc() { if(state == 0) { state = 1; ifr.contentWindow.location = 'http://www.a.com/proxy.html'; } else { var data = ifr.contentWindow.name; $.each($.parseJSON(data), function(i, v) { $('#data').append(v.name); }); //銷毀iframe,保證安全 ifr.contentWindow.document.write(''); ifr.contentWindow.close(); document.body.removeChild(ifr); }}</script></body></html>
更多關于PHP相關內容可查看本站專題:《PHP+ajax技巧與應用小結》、《PHP網絡編程技巧總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
相關文章: