Ajax請求利用jsonp實現跨域

跨域: js有一個同源限制,簡單說來源不一樣的話就無法相互間交互.那么怎么算來源不一樣呢, 舉個例子:瀏覽器訪問-->服務器A--->得到頁面A---頁面A中的js腳本只能訪問服務器A的資源(相同域名和端口,此外域名與對應的ip也算不同源,要么都域名,要么都ip).

以上就是js的跨域問題,但是這里需要注意一點的是服務器A是沒有跨域的問題的,這個只有js存在這個問題,也就是說: 頁面A中js-->服務器A--->跨域資源,這個路徑是可以.只有 頁面A中的js--->跨域資源,這個路徑是不行的.

然后說一下解決方案中的jsonp,這個不是一種格式,而是一種解決方案.

jsonp的原理:js雖然有同源限制,但是引入js文件的時候卻沒有這個限制,也就是說:

<script type="text/javascript" src="xxx/xxxx.js"></script>

其中src屬性引入js文件的時候是沒有同源限制的,此時是可以引入域外資源的.jsonp的原理就在這里,通過動態的創建一個以上那行js引入語句,通過其src屬性訪問域外資源.而域外資源服務器只要返回一個能被解析為js語句的字符串即可達到返回結果的目的,形如:

callback({"key":"value",...})  

其中callback是需要事先約定的名字,綠字部分為要返回的json字符串,然后拼接成以上那種形式直接返回即可.這樣頁面中的js從服務端接收到這個拼接的字符串后,就會直接執行本地的名為callback的js方法,這也就是為何callback這個需要事先約定的原因,需要保證頁面側要存在這個js方法,這個方法傳入的參數就為服務器側的返回值.

ajax是支持jsonp的,所以以上那些麻煩事情都會替我們做,寫法如下:

$.ajax({type: 'GET',url: "http://127.0.0.1:8080/xxx/xxx",async: false,dataType: "jsonp",jsonp: "callback",success: function(result){.....},timeout:3000  });

紅字部分標識我們使用jsonp的方式調用,實際上此時這個已經不是傳統意義上的ajax的get請求了,它的真實實現方式就是我們上文中說的那樣.其中紅字部分的callback為我們要和服務器端進行溝通的部分,這個請求發送到服務器端,實際上這樣的:

http://127.0.0.1:8080/xxx/xxx?callback=jqueryxxxx

服務器端需要通過callback來取值(類似用request.getParameter("callback")),也就是取后面的jqueryxxxx等自動生成的值,這個值實際上就是對應的我們發送請求的ajax方法中的success回調方法,服務器端如果返回

jqueryxxxx({"ret":"ok"})

頁面中會自動執行success方法,且將{"ret":"ok"}傳給success方法的參數result.

以上就是ajax通過jsonp的方式實現跨域訪問的過程.可以看出基本不用我們做什么額外操作,全都封裝好了.

轉載于:https://www.cnblogs.com/chyu/p/5005323.html

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

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

相關文章

[轉]使用Navicat for Oracle工具連接oracle的

使用Navicat for Oracle工具連接oracle的 這是一款oracle的客戶端的圖形化管理和開發工具&#xff0c;對于許多的數據庫都有支持。之前用過 Navicat for sqlserver,感覺很好用&#xff0c;所以下載了Oracle版的用。上網查看了一下這個工具可以用于任何版本 8i 或以上的 Oracle …

微信小程序基于第三方插件微信同聲傳譯,以及一些問題解決辦法

使用之前首先得在微信微信小程序后臺添加插件&#xff0c;獲取插件的appid 名稱 使用時在app.json文件添加插件配置 1 plugins: { 2 WechatSI: { 3 version: 0.1.0, 4 provider: wx069ba97219f66d99 5 } 6 } 其次就是在使用的頁面進行調用 在index.js外…

TF卡里刪掉文件后內存沒變大_內存卡損壞怎么修復?數據恢復方法教程

內存卡損壞怎么修復&#xff1f;內存卡又叫SD卡&#xff0c;是一種很輕便小巧的便攜存儲裝置&#xff0c;往往內置于各種便攜媒體設備內部。內存卡本身具有堅固、抗沖擊等外部特性和讀寫快、空間大等內部特性&#xff0c;但是內存卡因為每天都要讀寫大量數據很容易從內部發生損…

apollo持久化sentinel_Spring Cloud Alibaba基礎教程:Sentinel使用Apollo存儲規則

上一篇我們介紹了如何通過Nacos的配置功能來存儲限流規則。Apollo是國內用戶非常多的配置中心&#xff0c;所以&#xff0c;今天我們繼續說說Spring Cloud Alibaba Sentinel中如何將流控規則存儲在Apollo中。使用Apollo存儲限流規則Sentinel自身就支持了多種不同的數據源來持久…

Lintcode: Unique Paths

C dp 遞推式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 初值&#xff1a;dp[i][j] 1&#xff0c;i0 or j0 空間優化&#xff1a;省掉一維 1 class Solution {2 public:3 /**4 * param n, m: positive integer (1 < n ,m < 100)5 * return an integer6…

idea 如何隱藏/展示不想看到的文件

隱藏&#xff1a;在 Ignore files and folders中添加想要過濾的文件或文件夾名稱 展示隱藏文件&#xff1a; 在過濾列表中刪除掉文件或者文件夾就好了 轉載于:https://www.cnblogs.com/mengjianzhou/p/6177897.html

BZOJ2286: [Sdoi2011]消耗戰(虛樹)

BZOJ2286: [Sdoi2011]消耗戰 Time Limit: 20 Sec   Memory Limit: 512 MB Description 在一場戰爭中&#xff0c;戰場由n個島嶼和n-1個橋梁組成&#xff0c;保證每兩個島嶼間有且僅有一條路徑可達。現在&#xff0c;我軍已經偵查到敵軍的總部在編號為1的島嶼&#xff0c;而且…

Java基礎知識:Java實現Map集合二級聯動4

comboBox.setModel(new DefaultComboBoxModel(getProvince())); // 添加省份信息 final JLabel label new JLabel(); label.setText("省/直轄市"); label.setBounds(155, 30, 66, 18); panel.add(label); final JLabel label_1 new JLabel(); label_1.setText(&quo…

linux QT 結束當前進程_Qt編寫控件屬性設計器7-串口采集

一、前言數據源是組態軟件的核心靈魂&#xff0c;少了數據源&#xff0c;組態就是個花架子沒卵用&#xff0c;一般數據源有三種方式獲取&#xff0c;串口、網絡、數據庫&#xff0c;至于數據規則是什么&#xff0c;這個用戶自己指定&#xff0c;本設計器全部采用第一個字節作為…

magento2郵件調試方法

order mail 直接打印到頁面上 位置 vendor\magento\module-sales\Model\Order\Email\Sender.php Magento\Sales\Model\Order\Email\Sender::prepareTemplate() 添加代碼 $objectManager \Magento\Framework\App\ObjectManager::getInstance(); $templateFactory $objectManag…

python多進程怎么樣_Python執行多進程任務的方法

Python的多進程可以借助from multiprocessing import Pool來實現。簡而言之分為這樣幾步&#xff1a;導入包from multiprocessing import Pool編寫任務函數。def 任務函數(參數)實例化進程池并設置進程數。poolPool(欲設置的進程數)開始布置任務&#xff0c;把多個任務添加進多…

JAVA多線程之Synchronize 關鍵字原理

image眾所周知 Synchronize 關鍵字是解決并發問題常用解決方案&#xff0c;有以下三種使用方式: 同步普通方法&#xff0c;鎖的是當前對象。同步靜態方法&#xff0c;鎖的是當前 Class 對象。同步塊&#xff0c;鎖的是 {} 中的對象。實現原理&#xff1a;JVM 是通過進入、退出對…

iOS-數據持久化-第三方框架FMDB的使用

FMDB簡單介紹 一、簡單說明 1.什么是FMDB FMDB是iOS平臺的SQLite數據庫框架 FMDB以OC的方式封裝了SQLite的C語言API 2.FMDB的優點 使用起來更加面向對象&#xff0c;省去了很多麻煩、冗余的C語言代碼 對比蘋果自帶的Core Data框架&#xff0c;更加輕量級和靈活 提供了多線程安全…

電腦word文檔打不開怎么辦_word怎么轉pdf?兩個值得學習的高效轉換法

word怎么轉pdf&#xff1f;兩個值得學習的高效轉換法word怎么轉pdf&#xff1f;pdf格式是我們經常能夠使用到的格式&#xff0c;因為pdf格式在傳遞的過程中能更好地避免文件出現亂碼打不開或誤觸導致文件被修改的情況。那如果想要把word文件轉換成pdf格式以避免閱讀word時文件被…

sql server常用函數、常用語句

一、常用函數 1.字符串函數 &#xff1a; charindex(:,abc:123) --尋找一個字符在一段字符串中起始的位置 len(zhangsan) --獲取一段字符串的長度 left(Ly,君子之耀,2) --從一段字符串左邊返回指定長度的字符 right(char_expr,int_expr) --返回字符串右邊int_expr個字符 …

python 矩陣乘法 跳過nan_python – Numpy:當一些向量元素等于零時,矩陣向量乘法不會跳過計算嗎?...

我最近一直致力于一個項目,其中我的大部分時間花費在密集矩陣A和稀疏向量v上(見here).在我嘗試減少計算時,我注意到A.dot(v)的運行時間不受v的零條目數的影響.為了解釋為什么我希望在這種情況下改進運行時,讓result A.dot.v使得j 1的結果[j] sum_i(A [i,j] * v [j])… v.sha…

[轉]Responsive Tables Demo

本文轉自&#xff1a;http://elvery.net/demo/responsive-tables/ A quick and dirty look at some techniques for designing responsive table layouts. This was put together in haste (and with the aid of Twitter Bootstrap) for What Do You Know Brisbane hosted by W…

Scala函數式對象-有理數

有理數類的表示 實現規范&#xff1a;支持有理數的加減乘除&#xff0c;并支持有理數的規范表示 1.定義Rational 首先&#xff0c;考慮用戶如何使用這個類&#xff0c;我們已經決定使用“Immutable”方式來使用Rational對象&#xff0c;我們需要用戶在定義Rational對象時提供分…

2020雙十一實時大屏_2020拼多多雙十一,拼多多雙十一活動

2020拼多多雙十一&#xff0c;拼多多雙十一活動&#xff0c;2020拼多多雙十一&#xff0c;拼多多雙十一活動2020拼多多雙十一&#xff0c;拼多多雙十一活動拼多多雙11來了全球狂歡節先領券再購物低價風暴 震撼來襲沒有最低 只有更低拼多多優惠券商城拼多多優惠商城&#xff0c;…

dataTables本地刷新數據解決只能初始化一次問題

2019獨角獸企業重金招聘Python工程師標準>>> dataTables的表格只能初始化一次&#xff0c;這樣如果需要動態改變表格數據的話就需要寫多個表格&#xff0c;這樣很顯然不是一個好的解決方案。 dataTables Api提供了刷新數據解決方案&#xff1a; 這里大概說一下案例&…