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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSONP - 跨域AJAX

發布時間:2024/9/20 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSONP - 跨域AJAX 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎概念

在進入本文正題之前,我們需要先了解一些基礎概念(如果你已經對這些基礎有所了解,可跳過此段落)。

同源策略和跨域概念

同源策略(Same-orgin policy)限制了一個源(orgin)中加載腳本或腳本與來自其他源(orgin)中資源的交互方式。
如果兩個頁面擁有相同的協議(protocol),端口(port)和主機(host),那么這兩個頁面就屬于同一個源(orgin)。

同源之外的請求都可以稱之為跨域請求。
下表給出了相對http://store.company.com/dir/page.html同源檢測的示例:

?

URL結果原因
http://store.company.com/dir2/other.html成功?
http://store.company.com/dir/inner/another.html成功?
https://store.company.com/secure.html失敗協議不同
http://store.company.com:81/dir/etc.html失敗端口不同
http://news.company.com/dir/other.html失敗主機名不同

?

我們可以簡單粗暴地理解為同一站點下的資源相互訪問都是同源的,跨站點的資源訪問都是跨域的。

跨域資源共享

跨域資源共享(CORS)是一份瀏覽器技術的規范,提供了Web服務器從不同網域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是JSONP模式的現代版。與JSONP不同,CORS除了支持GET方法以外,還支持其他HTTP方法。用CORS可以讓網頁設計師用一般的XMLHTTPRequest,這種方式的錯誤處理比JSONP要來的好。另一方面,JSONP可以在不支持CORS的老舊瀏覽器上運作,現代的瀏覽器都支持CORS。

在網頁http://caniuse.com/#feat=cors上列出了主流瀏覽器對CORS的支持情況,包含PC端和移動端的瀏覽器。

JSONP概念

由于同源策略,一般來說不允許JavaScript跨域訪問其他服務器的頁面對象,但是HTML的<script>元素是一個例外。利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執行而不是用 JSON 解析器解析。

REST Web Services簡介

HTTP協議是Web的標準之一,HTTP協議包含一些標準的操作方法,例如:GET, POST, PUT, Delete等,用這些方法能夠實現對Web資源的CURD操作,下表列出了這些方法的操作定義。

HTTP方法資源處理說明
GET讀取資源(Read)獲取被請求URI(Request-URI)指定的信息(以實體的格式)。
POST創建資源(Create)在服務器上創建一個新的資源,并返回新資源的URI。
PUT更新資源(Update)指定URI資源存在則更新資源,指定URI資源不存在則創建一個新資源。
DELETE刪除資源(Delete)刪除請求URI指定的資源。

在REST應用中,默認通過HTTP協議,并且使用GET、POST、PUT和DELETE方法對資源進行操作,這樣的設計風格和Web標準完全契合。

REST的最佳應用場景是公開服務,使用HTTP并遵循REST原則的Web服務,我們稱之為RESTful Web Service。RESTful Web Service從以下三個方面進行資源定義:

  • 直觀簡短的資源地址:URI,比如:http://example.com/resources/
  • 傳輸的資源:Web Service接受與返回的互聯網媒體類型,比如JSON,XML等
  • 對資源的操作:Web Service在該資源上所支持的一系列請求方法(比如:GET,POST,PUT或Delete)

下圖展示了RESTful Web Service的執行流程

本文的服務端程序是基于ASP.NET Web API構建的。
在了解了這些基礎知識后,我們就分別來構建服務端程序和客戶端程序吧。

?

http://kb.cnblogs.com/page/139725/

方法一:在后端代碼的頭部加入這個代碼(php示例)

header("Access-Control-Allow-Origin:*");
或者
header("Access-Control-Allow-Origin:url地址");

方式二:

Web頁面上調用js文件時則不受是否跨域的影響(不僅如此,我們還發現凡是擁有”src”這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>

ajax和jsonp其實本質上是不同的東西。ajax的核心是通過XmlHttpRequest獲取非本頁內容,而jsonp的核心原理則是動態添加<script>標簽來調用服務器提供的js腳本

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head><title>Untitled Page</title><script type="text/javascript" src=jquery.min.js"></script><script type="text/javascript">jQuery(document).ready(function(){$.ajax({type: "get",async: false,url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998",dataType: "jsonp",jsonp: "callback",//傳遞給請求處理程序或頁面的,用以獲得jsonp回調函數名的參數名(一般默認為:callback) jsonpCallback:"flightHandler",//自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名,也可以寫"?",jQuery會自動為你處理數據 success: function(json){alert('您查詢到航班信息:票價: ' + json.price + ' 元,余票: ' + json.tickets + ' 張。');},error: function(){alert('fail');}});});var flightHandler = function(data){alert('你查詢的航班結果是:票價 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 張。'); </script> </head> <body> </body> </html>

?

jquery在處理jsonp類型的ajax時,自動幫你生成回調函數并把數據取出來供success屬性方法來調用

轉載于:https://www.cnblogs.com/CyLee/p/5381578.html

總結

以上是生活随笔為你收集整理的JSONP - 跨域AJAX的全部內容,希望文章能夠幫你解決所遇到的問題。

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