不管是何種跨域請求方式,ajax都一樣,不同的是服務器端的配置
Flash
技術老舊,過氣
服務器代理中轉
瀏覽器發送ajax給服務器,服務器再發送請求給另一個服務器,然後將請求結果在給瀏覽器。
josnp
只支持get請求
- json實際上是利用
<script>
引入js文件不受同源跨域策略的影響。
事實上,凡是擁有src屬性的標籤,都擁有跨域的能力。如:<scrpit> <img> <iframe>
另外,<script scr="ulr"></script>
,不管url是個什麼文件(比如php/txt/js/png),<script >
總會將文件內的內容解析到標籤內部。(不信的話,可以試一試) - 實際應用時,跨域請求一般是響應用戶操作的,所以
<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 = “基礎域名”;