日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ajax和jsonp没有半点关系,跨域问题

發(fā)布時間:2025/7/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax和jsonp没有半点关系,跨域问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

jsonp確實和ajax沒有半毛錢關系,只算是一種機制跨域數據獲取方案或者協議。
只是說很多庫(比如jquery)里面對jsonp和ajax做了一樣的封裝,看起來就好像jsonp是ajax的一部分一樣,這好像會造成誤解。

ajax是使用js內置的對象進行網絡請求獲取數據

jsonp是使用script當中的src來獲取數據

什么時候跨域

一個域名訪問另外一個域名

什么時候出現要跨域情況

1、以下是造成跨域的一些情況,只有目錄路徑不同才是同源地址

跨域的直觀認識

一個域名地址需要訪問另外一個域名地址的數據

為什么會有跨域?

-->說白了是為了數據的安全

出于安全性考慮,瀏覽器不允許ajax跨域獲取數據

瀏覽器為了保證數據的安全,不允許直接請求使用別的域名數據。瀏覽器做了一個攔截。其實數據已經響應到了瀏覽器。瀏覽器沒有把它給我們,不會隨意注入你的瀏覽器。例如黑客會通過重定向把一些你不想打開的網頁在你的瀏覽器中打開

是誰導致了跨域?

-->瀏覽器

需求:當用戶當請求一個地址要拿到里面的數據展示在自己的域名當中

現實:拿不到數據顯示在自己的域名當中

原因:當你訪問地址的時候,實際上數據已經從別的域名拿過來了(可以從network上的接收包查看),但是瀏覽器為了保障不被信用的數據注入本地,進行了攔截。

解決跨域的兩種方法

1、在瀏覽器安裝插件(自己百度)

2、通過src實現跨域方案

講第二種方法之前先了解一下基本概念:

使用src內容請求是不會存在跨域問題,在服務器端,返回js語句是可以直接運行。

服務器或者說后臺(php)不存在跨域問題,當遇到跨域問題時通過PHP文件(自身文件)進行訪問。

所以通過第二種方式解決跨域,必須前后臺的合作才能私行(前臺傳callback參數,后臺服務器接收callback并返回數據)。步驟:

? ? ? ? 0.在前端定義一個function.
? ? ? ? ? ? function fn(res) {
? ? ? ? ? ? ? ? alert(res);
? ? ? ? ? ? ?}
? ? ? ? 1.通過<script src=> 向服務器發(fā)送一個請求。 在發(fā)送請求過程當中。把function的名稱做為參數傳給服務器。
? ? ? ? ? ?<script src="get.php?callback=fn"></script>
? ? ? ? 2.服務器接收callback值。
? ? ? ? ? $fn = $_GET['callback'];
? ? ? ? 3.在返回時,在接收參數這后面拼接一個括號。
? ? ? ? ? 如果想要傳遞數據,就把數據放到括號當中。
? ? ? ? ? echo ?$fn.'("xmg123")';
? ? ? ? 4.就會執(zhí)行前端定義的function
? ? ? ? ? fn("hello");

?

jsonp不是使用xhr對象發(fā)送請求,而是創(chuàng)建一個script標簽,標簽的src屬性設置成要請求的URL。當標簽插入dom時瀏覽器就會自動請求這個URL,并把結果當做js代碼執(zhí)行。這樣做的優(yōu)點是跨域,缺點是只能使用get,而且不能設置header。因為請求完全不受js控制
jsonp的限制是來源于src的限制,src是不可能做到post請求的

有一篇討論帖可以解答?https://segmentfault.com/q/1010000004884037

轉載于:https://my.oschina.net/u/2949632/blog/812474

總結

以上是生活随笔為你收集整理的ajax和jsonp没有半点关系,跨域问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。