Ajax不能跨域,比如您是www.baidu.com,您就不能請求www.163.com的文件。但您可以請求www.baidu.com/1.json、ent.baidu.com/1.json。這是因為安全原因,對于任何后臺語言來說、服務(wù)器程序來說,所有的XHR類型的請求,如果來自其他的服務(wù)器,將不予應(yīng)答。
一、使用jsonp
JSONP是JSON with Padding的略稱。它是一個非官方的協(xié)議,出處不可考,它允許在服務(wù)器端集成Script tags返回至客戶端,通過javascript callback的形式實現(xiàn)跨域訪問(這僅僅是JSONP簡單的實現(xiàn)形式)。--來源百度
JSONP就像是JSON+Padding一樣(Padding這里我們理解為調(diào)用函數(shù)時的填充)。
綠色部分是JSON,外面的fun();是函數(shù)的調(diào)用,是padding補(bǔ)充部分。
jsonp的原理很簡單,就是把定義寫在了HTML源文件里面,而將調(diào)用放在script標(biāo)簽引用的文件里面,由于script標(biāo)簽可以跨文件使用,這樣就實現(xiàn)了跨域,引用的文件可以有各種格式php 、js、txt等。
下面舉個例子:
jsonp.txt里面的內(nèi)容如下:
//調(diào)用函數(shù)fun({ "result" : [ { "name" : "小明", "age" : 12, "sex" : "男" }, { "name" : "小紅", "age" : 13, "sex" : "女" }, { "name" : "小綠", "age" : 16, "sex" : "女" } ]});
運行結(jié)果:
由于這樣使用起來不方便,我們可以將它封裝成一個實用輪子:
jQuery已經(jīng)有封裝好的API可以直接使用:名稱是ajax()
可以查看jQuery手冊,參考如下
二、使用PHP偷數(shù)據(jù)
幾乎每種后臺語言都可以實現(xiàn)該功能,以下是PHP的示例:
<?php header("Content-Type:text/html;charset=utf-8"); $a = file_get_contents("網(wǎng)址"); print_r($a);?>
其中,header是設(shè)置返回到瀏覽器中的頭文件的字符集和文件類型
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點
疑難解答