国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java Ajax jsonp 跨域請求

詳解Java Ajax jsonp 跨域請求

2020-11-05 15:53懶惰的幻想著 JAVA教程

本篇文章主要介紹了詳解Java Ajax jsonp 跨域請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1、什么是JSONP

一般來說位于 server1.example.com 的網頁無法與不是 server1.example.com的服務器溝通,而 HTML 的<script> 元素是一個例外。利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執行而不是用 JSON 解析器解析。

JSONP是一種協議,為了解決客戶端請求服務器跨域的問題,但是并非是正式的傳輸協議。該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了.

2、Ajax 請求其他域接口

我這個項目要請求另外一個第一個后臺接口請求數據,在頁面渲染的時候,通過ajax加載數據如下:

 
?
1
 
2
3
4
5
6
7
8
9
10
$.ajax({
      url: 'http://www.xxx.cn/lalala?method=10082&page=1&pageSize=10',
      type: 'GET',
      dataType: 'json',
      timeout: 5000,
      contentType: 'application/json; charset=utf-8',
      success: function (result) {
        alter("aaaa");
      }
    });

這樣就出現跨域的錯誤,如下所示:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 500.

詳解Java Ajax jsonp 跨域請求

這里就說明不允許跨域請求,那么怎么辦? 換成jsonp好了。就改了dataType這個字段。

 
?
1
 
2
3
4
5
6
7
8
9
10
$.ajax({
      url: 'http://www.xxx.cn/lalala?method=10082&page=1&pageSize=10',
      type: 'GET',
      dataType: 'jsonp',
      timeout: 5000,
      contentType: 'application/json; charset=utf-8',
      success: function (result) {
        alter("aaaa");
      }
    });

結果: Uncaught SyntaxError: Unexpected token!

what the fuck!詳解Java Ajax jsonp 跨域請求 明明請求回來數據,結果還是報錯。原因是ajax請求服務器,而返回的數據格式不符合jsonp的返回格式,那么jsonp格式是什么樣的?

 
?
1
 
Callback({msg:'this is json data'})

這是什么叼東西,奇葩誰定義的!如果你這么想,看來你沒有仔細看第1點,JSON是一種輕量級的數據交換格式,像xml一樣。JSONP是一種使用JSON數據的方式,返回的不是JSON對象,是包含JSON對象的javaScript腳本。但是上圖是一段json串,所以報錯啦。

3、參數返回處理

有一點你會發現在你是用jsonp協議請求時,在參數中除了自己填寫的參數外還有名為callback的參數,如圖:

詳解Java Ajax jsonp 跨域請求

看看這個參數是什么東西,因為我在ajax請求的時候沒有指定,jsonp這個參數,那么系統默認參數名為“callback”。沒有指定jsonpCallback參數, 那么jquery會生成隨機的函數名,如上圖所示。

比如我如下配置:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
      url: 'http://www.xxx.cn/lalala?method=10082&page=1&pageSize=10',
      type: 'GET',
      dataType: 'jsonp',
      jsonp:'callbacka',//傳遞給請求處理程序或頁面的,用以獲得jsonp回調函數名的參數名(默認為:callback)
      jsonpCallback:"success_jsonpCallback",//自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
      timeout: 5000,
      contentType: 'application/json; charset=utf-8',
      success: function (result) {
        alter("aaaa");
      }
    });

那么服務器亦可以通過下面方法獲取回調的函數名:

 

復制代碼 代碼如下:

string callbackFunName =request.getParameter("callbacka");//獲取的就是success_jsonpCallback 字符串

 

 

注意:系統會區分函數名大小寫。

詳解Java Ajax jsonp 跨域請求

那么下面按照格式包裝一下看看咯:

 
?
1
 
2
3
String callback = request.getParameter("callback"); //不指定函數名默認 callback
 
return callback+ "(" + jsonStr + ")"

包了一下,結果真的不報錯,看下返回數據如下圖:

詳解Java Ajax jsonp 跨域請求

4、JSONP的執行過程

首先在客戶端注冊一個callback (如:'jsoncallback'), 然后把callback的名字(如:jsonp1236827957501)傳給服務器。注意:服務端得到callback的數值后,要用jsonp1236827957501(......)把將要輸出的json內容包括起來,此時,服務器生成 json 數據才能被客戶端正確接收。

然后,以 javascript 語法的方式,生成一個function, function 名字就是傳遞上來的參數 'jsoncallback'的值 jsonp1236827957501 .

最后,將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。客戶端瀏覽器,解析script標簽,并執行返回的 javascript 文檔,此時javascript文檔數據,作為參數, 傳入到了客戶端預先定義好的 callback 函數(如上例中jquery $.ajax()方法封裝的的success: function (json))里。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000006228298

延伸 · 閱讀

精彩推薦
  • JAVA教程Java常用字符串工具類 字符串智能截取(3)

    Java常用字符串工具類 字符串智能截取(3)

    這篇文章主要為大家詳細介紹了Java常用字符串工具類,字符串的智能截取,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    龍軒4692020-09-28
  • JAVA教程Java日志框架之logback使用詳解

    Java日志框架之logback使用詳解

    這篇文章主要介紹了Java日志框架之logback使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    五月的倉頡1192020-08-01
  • JAVA教程Java基于TCP方式的二進制文件傳輸

    Java基于TCP方式的二進制文件傳輸

    這篇文章主要為大家介紹了Java基于TCP方式的二進制文件傳輸,一個基于Java Socket協議之上文件傳輸的完整示例,基于TCP通信完成,感興趣的小伙伴們可以參...

    gloomyfish1402020-03-22
  • JAVA教程Servlet和Filter之間的區別與聯系

    Servlet和Filter之間的區別與聯系

    這篇文章主要介紹了Servlet和Filter之間的區別與聯系的相關資料,需要的朋友可以參考下 ...

    桑梓子1842020-04-24
  • JAVA教程Java中的泛型詳解

    Java中的泛型詳解

    這篇文章主要介紹了Java中的泛型詳解,本文講解了泛型類或接口、從泛型類派生子類、偽泛型、類型通配符、通配符的上限、通配符的下限、擦除和轉換等...

    junjie2412019-12-16
  • JAVA教程Java異常處理中的一些特殊情況舉例

    Java異常處理中的一些特殊情況舉例

    這篇文章主要介紹了Java異常處理中的一些特殊情況舉例,分別是只用try和finally不用catch,以及finally語句不被執行的情況,需要的朋友可以參考下 ...

    goldensun2222020-01-20
  • JAVA教程簡介Java編程中的Object類

    簡介Java編程中的Object類

    這篇文章主要介紹了簡介Java編程中的Object類,是Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    goldensun3932020-01-06
  • JAVA教程spring解決循環依賴

    spring解決循環依賴

    這篇文章主要介紹了spring如何解決循環依賴,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下...

    TomCoding4522020-09-30
主站蜘蛛池模板: 操操操干干干 | 成人精品视频一区二区三区 | 欧美国产精品一区二区三区 | 国产精品日产欧美久久久久 | 午夜精品视频 | 日本高清视频在线播放 | 亚洲国产人午在线一二区 | 特污影院| 欧美日本一区 | 亚洲国产成人av好男人在线观看 | 转生成为史莱姆这档事第四季在线观看 | 日韩视频一二 | 成人在线欧美 | 青草精品 | 亚洲乱码国产乱码精品精软件 | 国产韩国精品一区二区三区 | 米奇777超碰欧美日韩亚洲 | 久久99精| 日本中文字幕一区 | 亚洲aⅴ网站 | 一级片欧美 | 永久黄网站色视频免费 | 日韩在线播放视频 | 亚洲综合中文 | 久久久亚洲国产天美传媒修理工 | 成人在线免费 | 伦乱视频 | 91成人黄色| 欧美在线国产 | 国产大学生援交视频在线观看 | 国产美女www爽爽爽免费视频 | 中文字幕av在线播放 | 成人在线欧美 | 国产欧美在线 | yw193com尤物| 日韩一区在线视频 | 毛片免费毛片一级jjj毛片 | 亚洲国产精品激情在线观看 | 午夜精品久久久久久久久 | 久久国内精品 | 国产精品区一区二区三含羞草 |