詳細(xì)解密jsonp跨域請(qǐng)求
1.什么是跨域請(qǐng)求:
服務(wù)器A上的一個(gè)頁(yè)面,要請(qǐng)求服務(wù)器B上的一個(gè)處理程序,這就叫做跨域請(qǐng)求
本次的測(cè)試頁(yè)面為:
處理程序kimhandler.ashx,如下:
%@ WebHandler Language="C#" Class="KimHandler" %>
using System;
using System.Web;
public class KimHandler : IHttpHandler {
public void ProcessRequest (HttpContext context)
{
string msg = "{\"name\":\"kim\",\"gender\":\"男\(zhòng)",\"age\":24}";
context.Response.Write(msg);
}
public bool IsReusable {
get {
return false;
}
}
}
另一張?zhí)幚沓绦騢andler.ashx如下:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context)
{
string callbackName = context.Request.Params["callbackFun"];
string msg = callbackName+ "({\"name\":\"kim\",\"age\":\"18\"});";
context.Response.Write(msg);
}
public bool IsReusable {
get {
return false;
}
}
}
2.Ajax無(wú)法實(shí)現(xiàn)跨域請(qǐng)求
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script>
var requestUrl = "http://qxw1192430265.my3w.com/kimhandler.ashx";
window.onload = function () {
document.getElementById("btnAjax").onclick = function() {
var xhr = new XMLHttpRequest();
xhr.open("get", requestUrl, true);
xhr.setRequestHeader("If-Modified-Since", 0);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var res = xhr.responseText;
alert(res);
}
}
xhr.send(null);
}
}
</script>
</head>
<body>
<input type="button" id="btnAjax" value="點(diǎn)擊" />
</body>
</html>
查看監(jiān)視器,發(fā)現(xiàn)沒(méi)有返回任何請(qǐng)求報(bào)文體

3.使用script標(biāo)簽,可以實(shí)現(xiàn)跨域請(qǐng)求
測(cè)試代碼如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="http://qxw1192430265.my3w.com/kimhandler.ashx"></script> </head> <body> </body> </html>
查看監(jiān)視器,可以看到,有返回請(qǐng)求報(bào)文體

在用json格式看下

4.使用js方式,在瀏覽器端,讀取響應(yīng)是數(shù)據(jù)
測(cè)試代碼如下,注意換了一個(gè)處理程序
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script>
function getData(data) {
for (var key in data) {
alert(data[key]);
}
}
</script>
<script src="http://qxw1192430265.my3w.com/handler.ashx?callbackFun=getData"></script>
</head>
<body>
</body>
</html>
通過(guò)后臺(tái)代碼,可知

然后在監(jiān)視器上看看


發(fā)現(xiàn)在瀏覽器端,彈出了kim還有18
5.使用Jq來(lái)實(shí)現(xiàn)跨域請(qǐng)求(內(nèi)部原理就是為我們創(chuàng)建了一個(gè)script標(biāo)簽)
代碼如下
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="jquery-1.9.0.js"></script>
<script>
var requestUrl = "http://qxw1192430265.my3w.com/handler.ashx";
window.onload = function () {
document.getElementById("btnJq").onclick = function() {
$.ajax(requestUrl, {
type: "get", //請(qǐng)求方式
dataType: "jsonp", //數(shù)據(jù)發(fā)送類(lèi)型
jsonp: "callbackFun", //服務(wù)器端接收的參數(shù)
jsonpCallback: "fun", //js處理方法
success: function () {
alert("成功");
}
});
}
}
function fun(data) {
for (var key in data) {
alert(data[key]);
}
}
</script>
</head>
<body>
<input type="button" id="btnJq" value="Jq按鈕" />
</body>
</html>
點(diǎn)擊按鈕后,可以看到效果,再看下監(jiān)視器

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- 實(shí)例講解使用原生JavaScript處理AJAX請(qǐng)求的方法
- 原生js jquery ajax請(qǐng)求以及jsonp的調(diào)用方法
- 詳解JavaScript原生封裝ajax請(qǐng)求和Jquery中的ajax請(qǐng)求
- 原生javascript的ajax請(qǐng)求及后臺(tái)PHP響應(yīng)操作示例
- Javascript原生ajax請(qǐng)求代碼實(shí)例
- 輕松搞定jQuery+JSONP跨域請(qǐng)求的解決方案
- JavaScript用JSONP跨域請(qǐng)求數(shù)據(jù)實(shí)例詳解
- Ajax jsonp跨域請(qǐng)求實(shí)現(xiàn)方法
- JSONP跨域請(qǐng)求實(shí)例詳解
- JSONP跨域請(qǐng)求
- jsonp跨域請(qǐng)求實(shí)現(xiàn)示例
- 原生js實(shí)現(xiàn)ajax請(qǐng)求和JSONP跨域請(qǐng)求操作示例
相關(guān)文章
js復(fù)制文本到粘貼板(Clipboard.writeText())
這篇文章主要介紹了js復(fù)制文本到粘貼板(Clipboard.writeText()),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
JavaScript日期時(shí)間與時(shí)間戳的轉(zhuǎn)換函數(shù)分享
這篇文章主要介紹了JavaScript日期時(shí)間與時(shí)間戳的轉(zhuǎn)換函數(shù)分享,本文給出兩個(gè)函數(shù)實(shí)現(xiàn)日期時(shí)間和時(shí)間戳間的轉(zhuǎn)換,需要的朋友可以參考下2015-01-01
基于JS實(shí)現(xiàn)01支付后的10秒倒計(jì)時(shí)
這是一個(gè)通過(guò)js實(shí)現(xiàn)的支付后的頁(yè)面,點(diǎn)擊支付會(huì)跳出一個(gè)彈窗,提示你是否要確定支付,確定后進(jìn)入付后界面,該頁(yè)面有著10秒倒計(jì)時(shí),計(jì)時(shí)結(jié)束后便會(huì)返回原界面,也可以選擇立刻返回,來(lái)返回主頁(yè)面,這篇文章主要介紹了基于JS實(shí)現(xiàn)01支付后的10秒倒計(jì)時(shí),需要的朋友可以參考下2023-03-03
JavaScript人臉識(shí)別技術(shù)及臉部識(shí)別JavaScript類(lèi)庫(kù)Tracking.js
人臉識(shí)別的JavaScript程序包是Face Detection,它是由Jay Salvat和Liu Liu開(kāi)發(fā)的。它是一個(gè)標(biāo)準(zhǔn)的jQuery插件,通過(guò)對(duì)提供的圖片進(jìn)行分析,返回所有找到的臉部圖像的坐標(biāo),感興趣的朋友跟著小編一起學(xué)習(xí)js人臉識(shí)別技術(shù)及臉部識(shí)別JavaScript類(lèi)庫(kù)Tracking.js吧2015-09-09
深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法
本文介紹了深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
javascript Three.js創(chuàng)建文字初體驗(yàn)
這篇文章主要為大家介紹了Three.js創(chuàng)建文字初體驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11
JavaScript?canvas實(shí)現(xiàn)水球加載動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了JavaScript?canvas實(shí)現(xiàn)水球加載動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
js實(shí)現(xiàn)鼠標(biāo)感應(yīng)圖片展示的方法
這篇文章主要介紹了js實(shí)現(xiàn)鼠標(biāo)感應(yīng)圖片展示的方法,實(shí)例分析了javascript鼠標(biāo)事件及樣式的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
js+html5實(shí)現(xiàn)手機(jī)九宮格密碼解鎖功能
這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)手機(jī)九宮格密碼解鎖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07

