跨域(三)——JSONP

一、什么是JSONP?

百度百科:JSONP(JSON with Padding)是JSON的 一種“使用模式”,可用于解決主流瀏覽器的跨域數據訪問的問題。由于同源策略,一般來說位于 server1.example.com 的網頁無法與不是 server1.example.com的服務器溝通,而 HTML 的<script> 元素是一個例外。利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執行而不是用 JSON 解析器解析。

二、JSONP的實現思路很簡單

1、前端創建script標記,設置src,添加到head中(當然也可以往body中添加)。

2, 后臺返回一個js變量jsonp,這個jsonp就是請求后的JSON數據。

3, 回調完成后刪除script標記(還有一些清理工作如避免部分瀏覽器內存泄露等)。

三、簡單代碼例子

服務器端:

<?php
$obj=array('chicken'=>2,'duck'=>3);//$ob是待傳遞對象
$callback=$_GET['callback'];//獲取傳入的函數名
if(!$callback){$callback='jsoncallback';//如果沒傳入就使用的默認函數名
}
//輸出一段JS格式的代碼,調用用傳入的函數名,參數為需要傳遞的$obj對象
echo "alert('我是小偷,哈哈');".$callback.'('.json_encode($obj).');';
?>

客戶端:

<div><span id="chicken"></span><br/><span id="duck"></span></div>
<script type="text/javascript">
//回調函數定義
function mycallback(obj){//輸出傳遞過來的對象
  document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;
};window.onload=function(){//創建SCRIPT標簽var script=document.createElement("script");//設置URL
  script.src="http://127.0.0.1:8081//langtao/steal.php?callback=alert('我是強盜');mycallback";//把標簽放入文檔中以便生效
  document.body.appendChild(script);document.body.removeChild(script);
};
</script><!--<script>
$.ajax({
dataType:'jsonp',
data:'id=1',
jsonp:'callback',
url:'http://127.0.0.1:8081//langtao/steal.php',
success:function(obj){document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;
},
});
</script>--><!--<script>
$.getJSON("http://127.0.0.1:8081//langtao/steal.php?callback=?",function(obj){document.getElementById('chicken').innerHTML=obj.chicken;document.getElementById('duck').innerHTML=obj.duck;}
);
</script>-->

?

四、安全問題

JSONP雖然易于實現,但是也會存在一些安全隱患,如果第三方的腳本隨意地執行,那么它就可以篡改頁面內容,截獲敏感數據。但是在受信任的雙方傳遞數據,JSONP是非常合適的選擇。

轉載于:https://www.cnblogs.com/aaron-shu/p/4170304.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273483.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273483.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273483.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring DAO之JDBC

Spring提供的DAO(數據訪問對象)支持主要的目的是便于以標準的方式使用不同的數據訪問技術&#xff0c; 如JDBC&#xff0c;Hibernate或者JDO等。它不僅可以讓你方便地在這些持久化技術間切換&#xff0c; 而且讓你在編碼的時候不用考慮處理各種技術中特定的異常。為了便于以一種…

程序猿是如何解決SQLServer占CPU100%的

文章目錄 遇到的問題使用SQLServer Profiler監控數據庫 SQL1&#xff1a;查找最新的30條告警事件SQL2&#xff1a;獲取當前的總報警記錄數有哪些SQL語句會導致CPU過高&#xff1f;查看SQL的查詢計劃 選擇top記錄時&#xff0c;盡量為order子句的字段建立索引查看SQL語句CPU高的…

通過wifi調試Android程序

原文&#xff1a;http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 1.首先讓android手機監聽指定的端口&#xff1a;  這一步需要使用shell&#xff0c;因此手機上要有終端模擬器&#xff0c;不過網上很多&#xff0c;隨便找個就行了&#xff0c…

基于jQuery的對象切換插件:soChange 1.5 (點擊下載)

http://www.jsfoot.com/jquery/demo/2011-09-20/192.html 所有參數&#xff1a; $(obj).soChange({ thumbObj:null, //導航對象&#xff0c;默認為空 botPrev:null, //按鈕上一個&#xff0c;默認為空 botNext:null, //按鈕下一個。默認為空 thumbNowClass:no…

atitit.Oracle 9 10 11 12新特性attilax總結

atitit.Oracle 9 10 11 12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 審計 1 1.3. 1. 審計簡介 1 1.4. 其他&#xff08;大部分是管理功能&#xff09; 2 2. Oracle 12c 的 12 個新特性 2 2.1. 2 Improved Defaults 增強了DEFAULT, default目前可以直接指代…

mysql讀書筆記---mysql safe update mode

You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 查看 mysql> show variables like %sql_safe%; 關閉 mysql> set sql_safe_updates0; 開啟 mysql> set sql_safe_updates1;

基于纖程(Fiber)實現C++異步編程庫(一):原理及示例

纖程&#xff08;Fiber&#xff09;和協程&#xff08;coroutine&#xff09;是差不多的概念&#xff0c;也叫做用戶級線程或者輕線程之類的。Windows系統提供了一組API用戶創建和使用纖程&#xff0c;本文中的庫就是基于這組API實現的&#xff0c;所以無法跨平臺使用&#xff…

MYSQL讀書筆記---運算符、字符串操作

運算符###########################################,!(<>),>,>,<,< is null , is not null, isnull(expr) expr between min and max expr in(v1,v2,...)流程#############################################mysql> select ifnull(1,0); #如果第一個參數為…

fluidity詳解

fluidity詳解 1.fluidity編譯過程 1.1.femtools庫調用方法 編譯fluidity/femtools目錄下所有文件&#xff0c;打包為libfemtools.a靜態庫文件&#xff1b;通過-lfemtools參數&#xff0c;并指定libfemtools.a靜態庫位置&#xff0c;即可調用 femtools 庫內所有函數2.fluidity主…

mysql讀書筆記---if語句

IF(expr1,expr2,expr3) 如果expr1是TRUE(expr1<>0 and expr1<>NULL)&#xff0c;則IF()的返回值為expr2;否則返回值則為expr3。IF()的返回值為數字值或字符串值&#xff0c;具體情況視其所在語境而定。 mysql>SELECT?IF(1>2,2,3); ->3 mysql>SELECT I…

C語言 將整數寫入內存指定的連續字節單元中

將整數數組寫入0x40003000開始的連續10個字節內存單元中&#xff0c;注意unsigned char *指向一個字節&#xff0c;而int *指向1個字&#xff08;4個字&#xff09;&#xff0c;但是可以把字中存儲的整數放入字節單元中&#xff0c;只要不超過表示的范圍&#xff0c;注意雖然un…

mysql讀書筆記----時間函數

1.獲得當前時間&#xff1a;時間格式yyyy-MM-dd curdate();2.DAYOFWEEK(date) 3.WEEKDAY(date) 4.DAYOFMONTH(date) 5.DAYOFYEAR(date) 6.MONTH(date) 7.DAYNAME(date) 8.MONTHNAME(date) 9.QUARTER(date) 10.WEEK(date) WEEK(date,first) 11.YEAR(date) 12.HOUR(time) 13.MINU…

企業數據1

1. 企業數據 1.1. 全局 1.1.1. 貨幣 CNY Chinese Yuan Renminbi &#xffe5; 6.825020 ARS Argentine Peso $ 3.791090 BOB Bolivian Boliviano $b 7.570800 BRL Brazilian Real R$ 1.766500 CAD Canadian Dollar $ 1.037570 CLP Chilean Peso $ …

sql判斷語句

方法一&#xff1a; <if test"null ! orderType and 0 orderType"> order by amountTimes desc </if><if test"null ! orderType and 1 orderType">order by amountTimes asc </if><if test"null ! orderType and 2 …

Thinkphp 整合tcpdf

網上查了些關于tcpdf 使用教程&#xff0c;整合到TP的話&#xff0c;會有些小問題&#xff0c;由于基礎還不是很扎實&#xff0c;花了點時間終于整合OK了。下面介紹步驟&#xff1a; 環境&#xff1a; TP版本&#xff1a;TP3.2.2 tcpdf:tcpdf_6_2_3 1. 將tcpdf_6_2_3.zip解壓在…

多項目開發下的dll文件管理

閱讀目錄&#xff1a;DS01&#xff1a;為什么要對生成的dll文件進行管理&#xff1f;DS02&#xff1a;首先介紹以下兩個DOS命令DS03&#xff1a;第一種實現方法&#xff08;xcopy&#xff09;DS04&#xff1a;第二種實現方法&#xff08;attrib&#xff09;DS05&#xff1a;分享…

關于Java中的隨機數產生

對比兩種寫法&#xff1a; 第一種&#xff1a; public static void main(String args[]){Random random new Random(System.currentTimeMillis());for(int i0; i<20; i){int sindex random.nextInt(2);System.out.println(sindex);}}第二種&#xff1a; public static voi…

視圖

視圖是虛表&#xff0c;是從一個或幾個基本表&#xff08;或視圖&#xff09;中導出的表&#xff0c;在系統的數據字典中僅存放了視圖的定義&#xff0c;不存放視圖對應的數據。視圖是原始數據庫數據的一種變換&#xff0c;是查看表中數據的另外一種方式。可以將視圖看成是一個…

選擇器的并發性

4.3.4 并發性 選擇器對象是線程安全的&#xff0c;但它們包含的鍵集合不是。通過keys( )和selectKeys( )返回的鍵的集合是Selector對象內部的私有的Set對象集合的直接引用。這些集合可能在任意時間被改變。已注冊的鍵的集合是只讀的。如果您試圖修改它&#xff0c;那么您得到的…

mysql 自定義函數之判斷

DELIMITER $$CREATE DEFINERrootlocalhost FUNCTION getMin(a int,b int) RETURNS int(11)BEGINdeclare min int;if(a>b)then set min b;elseif(b>a)then set min a;else set min 0;#end if;end if;RETURN min;END 調用該函數可以如下方式 select getMin(1,2); 返回值…