1. 程式人生 > >js中jsonp跨域請求

js中jsonp跨域請求

1、理解jsonp

什麼是跨域?

簡單的來說,出於安全方面的考慮,頁面中的JavaScript無法訪問其他伺服器上的資料,即“同源策略”。而跨域就是通過某些手段來繞過同源策略限制,實現不同伺服器之間通訊的效果。

具體策略限制情況可看下錶:

URL 說明 允許通訊
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下 允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同資料夾 允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同埠 不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協議 不允許
http://www.a.com/a.js
http://127.0.0.100/b.js
域名和域名對應ip 不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同 不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級域名(同上) 不允許
http://www.a.com/a.js
http://www.b.com/b.js
不同域名 不允許

什麼是JSONP?

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,而JSONP(JSON with Padding)則是JSON 的一種“使用模式”,通過這種模式可以實現資料的跨域獲取。 

JSONP跨域的原理

在同源策略下,在某個伺服器下的頁面是無法獲取到該伺服器以外的資料的,但img、iframe、script等標籤是個例外,這些標籤可以通過src屬性請求到其他伺服器上的資料。利用script標籤的開放策略,我們可以實現跨域請求資料,當然,也需要服務端的配合。當我們正常地請求一個JSON資料的時候,服務端返回的是一串JSON型別的資料,而我們使用JSONP模式來請求資料的時候,服務端返回的是一段可執行的JavaScript程式碼。

最簡單的例子:

檔案目錄就兩個檔案:

下面演示用mm.html來載入test.txt檔案中的資料。test.txt模擬跨域要取的資料檔案,mm.html模擬現在要渲染的頁面。

 test.txt中的資料格式為:

fun(
	{
		"result" : [
			{
				"xingming":"小明",
				"nianling" : 12,
				"sex" : "男"
			},
			{
				"xingming":"小紅",
				"nianling" : 13,
				"sex" : "女"
			},
			{
				"xingming":"小綠",
				"nianling" : 9,
				"sex" : "女"
			}
		]
	}
);

mm.html中程式碼為:

	<script type="text/javascript">
	function fun (data) {
		console.log(data)
	}
	</script>
	<script type="text/javascript" src="test.txt"></script>

控制檯能顯示獲取到的資料:

。。。。。。。。。。。。。最簡單的例子完工,我表述不清,大家可以自行復制程式碼執行理解下。。。。。。。

 2、把js原生封裝成了一個通用元件

程式碼如下:

		function myjsonp(URL,callback,callbackname){
			//給系統中建立一個全域性變數,叫做callbackname,指向callback函式
			//定義
			window[callbackname] = callback;
			//建立一個script節點
			var oscript = document.createElement("script");
			//和image不一樣,設定src並不會發出HTTP請求 
			oscript.src = URL;
			oscript.type = "text/javascript";
			//script標籤的請求是在上樹的時候發出,請求的是一個函式的執行語句
			document.head.appendChild(oscript);
			//為了不汙染頁面,瞬間把script拿掉
			document.head.removeChild(oscript);
		}


		//使用
		myjsonp("http://sclub.jd.com/productpage/p-1217508-s-0-t-3-p-1.html?callback=abcdefg",function(data){
			console.log(data);
		},"abcdefg");

3、jquery中jsonp的用法 

		$.ajax("test.txt",{
			//JSON跨域的時候要寫一個dataType,注意不是type而是dataType
			"dataType" : "jsonp",
			//要定義的函式名字,因為JSONP不缺執行,缺定義
			"jsonpCallback" : "fun",
			//資訊回來之後執行的事情
			"success" : function(data){
				console.log(data);  //這裡得到了請求的資料
			}
		});

test.txt格式為:

fun(
	{
		"result" : [
			{
				"xingming":"小明",
				"nianling" : 12,
				"sex" : "男"
			},
			{
				"xingming":"小紅",
				"nianling" : 13,
				"sex" : "女"
			},
			{
				"xingming":"小綠",
				"nianling" : 9,
				"sex" : "女"
			}
		]
	}
);

最後一種就是jq封裝好的jsonp(但是這個請求走了瀏覽器控制面板的network的xhr,感興趣的可以看下jq原始碼,看他是如何封裝的),之前講的原理懂得了,這個jq的jsonp的用法記住就好了。

相關推薦

jsjsonp請求

1、理解jsonp 什麼是跨域? 簡單的來說,出於安全方面的考慮,頁面中的JavaScript無法訪問其他伺服器上的資料,即“同源策略”。而跨域就是通過某些手段來繞過同源策略限制,實現不同伺服器之間通訊的效果。 具體策略限制情況可看下錶: URL 說明 允

js原生態請求與ajaxjsonp請求

在web開發中我們經常會說起指令碼的跨域訪問的問題,會出現跨域訪問的限制是因為javascript語言安全限制中的同源策略(same-origin policy )所造成的。 同源策略簡單的說就是一段指令碼只能讀取來自於同一來源的資源,這裡的同一來源指的是主機

vue-resourcejsonp請求

jsonp的用法   jsonp請求主要是用來解決ajax跨域請求問題,使用jsonp實現跨域首先要保證伺服器api支援jsonp請求的格式。   寫法格式: this.$http.jsonp('ur

JSjsonp是什麽?5分鐘學會jsonp請求

原生js span 資源 相同 con 服務器 color ucc ces 一、jsonp是什麽? jsonp是解決跨域請求的一種技術。瀏覽器為了防止CSRF攻擊會采用同源策略(協議/主機/端口均相同)限制,對非同源發起http請求(即跨域請求)會被瀏覽器阻止。

jsonp請求

innerhtml 問題 += outline html www. arr 方法 ctype 跨域是什麽?為什麽我們需要跨域? 跨域是指瀏覽器訪不能問另外一個網站的腳本,這是由於瀏覽器的同源策略造成的,同時也是瀏覽器施加給javascript的安全限制。 但是事實上,用戶瀏

jQuery jsonp請求詳解

路徑 下使用 utf 顯示 我們 ole show height json 跨域的安全限制都是對瀏覽器端來說的,服務器端是不存在跨域安全限制的。 瀏覽器的同源策略限制從一個源加載的文檔或腳本與來自另一個源的資源進行交互。 如果協議,端口和主機對於兩個頁面是相同的,則兩個頁面

jsonp請求php接口

jsonp 跨域 php 使用JQ和原生PHP作為例子: JS代碼: <script src="JQ的地址" type="text/javascript"></script> <script> var testApi = "跨域的地址"; $.ajax({

輕松搞定JSONP請求

set 合同 bsp 豆瓣 con 註意 wiki str ref 一、同源策略 要理解跨域,先要了解一下“同源策略”。所謂同源是指,域名,協議,端口相同。所謂“同源策略“,簡單的說就是基於安全考慮,當前域不能訪問其他域的東西。 一些常見的是否同源示例可參照下表: 在同源

jsonp請求,常見的集中書寫方式,及優缺點比較

簡介     符合Web2.0特徵的眾多網站一個明顯的特點就是採用Ajax。Ajax提供了在後臺提交請求訪問資料的功能。其實現主要使用的是XMLHttpRequest函式,這個函式允許客戶端的Javascript傳送到伺服器端的HTTP請求並獲得返回資料。Ajax同時也是

[jQuery] jsonp請求

以下內容來源:https://www.cnblogs.com/chiangchou/p/jsonp.html,本文只做記錄。   jQuery jsonp跨域請求   跨域的安全限制都是對瀏覽器端來說的,伺服器端是不存在跨域安全限制的。 瀏覽器的同源策略限制從

利用原生js實現ajax請求資料

首先,頁面中不需要引入任何的檔案。 1、前臺html頁面 <script> //定義一個ajax var $ = { ajax:function(option){ var url = option.url; var ca

js實現的幾種方法

js中幾種實用的跨域方法原理詳解 這裡說的js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向一個不同的域請求資料,或者通過js獲取頁面中不同域的框架中(iframe)的資料。只要協議、域名、埠有任何一個不同,都被當作是不同的域。 下表給出了相對http://sto

轉-jQuery jsonp請求

跨域的安全限制都是對瀏覽器端來說的,伺服器端是不存在跨域安全限制的。 瀏覽器的同源策略限制從一個源載入的文件或指令碼與來自另一個源的資源進行互動。 如果協議,埠和主機對於兩個頁面是相同的,則兩個頁面具有相同的源,否則就是不同源的。 如果要在js裡發起跨域請求,則要進行一些特殊處理了。或者,你可以把請求發

jQuery jsonp請求 jQuery jsonp請求

jQuery jsonp跨域請求   跨域的安全限制都是對瀏覽器端來說的,伺服器端是不存在跨域安全限制的。 瀏覽器的同源策略限制從一個源載入的文件或指令碼與來自另一個源的資源進行互動。 如果協議,埠和主機對於兩個頁面是相同的,則兩個頁面具有相同的源,否則就是不同源的。

網頁請求 同源策略、解決方案

  品習知識點 簡單表述幾個概念,詳解@度娘。 1、同源策略,瀏覽器最核心的安全功能,在無授權情況下,只允許讀寫相同源的資源。其中源(Origin)指的是協議、域名、介面,同源即三者相同。 2、預檢請求,瀏覽器出於安全策略,在跨域請求資料時候預先發起請求,以知是否可跨域請求資料的請求。 關

jsonp請求報錯Uncaught SyntaxError: Unexpected token :

jsonp跨域請求報錯Uncaught SyntaxError: Unexpected token :遇到就記錄一下: 通過自己不斷倒騰和看別人的部落格,總結如下: 前端程式碼: <div class="container"> <p>更新資訊</p&

【原創】Vue.js axios 訪問錯誤

1、假如訪問的介面地址為 http://www.test.com/apis/index.php  (php api 介面)2、而開發地址為http://127.0.0.1:8080,當axios發起請求時,出現如下錯誤:Failed to load http://www.test.com/apis/

Vue vue-resource 全域性攔截器 Post、Get、Jsonp請求、配置請求 全域性路徑配置

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../n

Ajax-jsonp請求簡單樣例

Ajax-jsonp跨域請求說明 1.簡要說明:  跨域的安全限制都是對瀏覽器端來說的,伺服器端是不存在跨域安全限制的。瀏覽器的同源策略限制從一個源載入的文件或指令碼與來自另一個源的資源進行互動。如果協議,埠和主機對於兩個頁面是相同的,則兩個頁面具有相同的源,否則就是不同源的。如果

js方法總結

什麼是跨域? 瀏覽器的安全策略,只要協議,域名,埠有任何一個不同,就被當做不同的域。 下面對http://www.qichedaquan.com的同源檢測 http://www.qichedaquan.com/a.html  // 同源 http://www.qichedaquan.com/b.html  /