解決瀏覽器跨域問題

不管是何種跨域請求方式,ajax都一樣,不同的是服務器端的配置

Flash

技術老舊,過氣

服務器代理中轉

瀏覽器發送ajax給服務器,服務器再發送請求給另一個服務器,然後將請求結果在給瀏覽器。

josnp

只支持get請求

  1. json實際上是利用<script>引入js文件不受同源跨域策略的影響。
    事實上,凡是擁有src屬性的標籤,都擁有跨域的能力。如:<scrpit> <img> <iframe>
    另外,<script scr="ulr"></script>,不管url是個什麼文件(比如php/txt/js/png),<script >總會將文件內的內容解析到標籤內部。(不信的話,可以試一試)
  2. 實際應用時,跨域請求一般是響應用戶操作的,所以<script>一般都是動態創建。
    動態創建並插入<script>是異步的,所以需要注意執行順序
    解決方式:
    ①服務器端將要被請求的文件內容爲:test({name:“tanjw”})
    ②html這麼處理:
<script>
	var oscript = document.createElement("script");
	oscript.src = "url";
	document.body.appendChild(oscript);//後面最好加上document.body.removeChild(oscript);
	function test(data){
		console.log(date);//此處模擬對請求數據的處理
	}
</script>

③前面提到,<script>會解析url文件的內容放入內部,上述相當於生成了一個<script>test({name:"tanjw"})</script>,此時就執行了上面創建的回調函數,於是就成功輸出了。
這麼寫,有兩點好處:不需要將變量名告訴瀏覽器;解決異步加載產生的問題。
④但每次這樣寫的話就要與後端溝通回調函數的名字,十分不方便,但可以將src寫作下面的形式,拼接一些內容src = "url?cb=test";cb表示回調函數的意思,後面是函數名,是告訴後端使用的是這個函數名,十分方便。

document.domain(只針對基礎域名相同)

在腳本最後添加上一句document.domain = “基礎域名”;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章