1.入門
需要掌握
1.資料的轉換parse()、stringify() stringify(json,['name','age'])
2.建立流程、封裝流程
3.會用AJAX
什麼是 AJAX?
- AJAX = Asynchronous JavaScript And XML.
- 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。
-
ajax可以異步和伺服器發送和接收資料
- 我覺得學好AJAX需要直到怎麼搞懂怎麼擷取資料和渲染到頁面上
- AJAX 并非程式設計語言。
- AJAX 僅僅組合了:
-
- 浏覽器内建的 XMLHttpRequest 對象(從 web 伺服器請求資料)
- JavaScript 和 HTML DOM(顯示或使用資料)
- Ajax 是一個令人誤導的名稱。Ajax 應用程式可能使用 XML 來傳輸資料,但将資料作為純文字或 JSON 文本傳輸也同樣常見。
- Ajax 允許通過與場景後面的 Web 伺服器交換資料來異步更新網頁。這意味着可以更新網頁的部分,而不需要重新加載整個頁面。
1.1AJAX 介紹
- AJAX 不是一種新的程式設計語言,而是一種用于建立更好更快以及互動性更強的 Web 應用程式的技術。
- 通過 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 對象來直接與伺服器進行通信。通過這個對象,您的 JavaScript 可在不重載頁面的情況與 Web 伺服器交換資料。
- AJAX 在浏覽器與 Web 伺服器之間使用
傳輸(HTTP 請求),這樣就可異步資料
,而不是整個頁面。使網頁從伺服器請求少量的資訊
- AJAX 可使網際網路應用程式更小、更快,更友好。
- AJAX 是一種獨立于 Web 伺服器軟體的浏覽器技術。
1.2同步和異步
同步:
一個人隻能同時做一件事情
,程式1調用程式2時,程式1停止,
必須程式2結束了,程式1才能執行
異步:多件事情可以
同時進行
。(比如animate,注冊時的提示)
1.3ajax優點
局部重新整理
,比如留言闆,不用reload了,就用ajax來顯示留言内容
1.4json資料的轉換
他是一個數組
資料庫裡面拿出來的就是json字元串
1.Json就是數組對象(記住)
2.json字元串,單引号嵌套雙引号
3.将json字元串轉換為數組
JSON.parse() 推薦
eval() 不推薦
4.JSON.stringify(obj,arr)将數組或則對象轉化為字元串 第二個參數為過濾字段(數組),裡面寫需要的字段,相當于篩選字段
比如:JSON.stringify(json,['name','age'])
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
// 數組
var arr=[1,2,3,4,5];
console.log(arr)
// 對象
var obj={
title:'早飯',
food:'雞蛋',
sex:'男'
}
console.log(obj)
// Json就是數組對象(記住)
var json=[
{
name:'張三',
age:18,
sex:'男'
},
{
name:'李四',
age:18,
sex:'男'
},
{
name:'王霸',
age:20,
sex:'男'
}
]
// json字元串,單引号嵌套雙引号
var jsonStr='[{"name":"張三","age":"18","sex":"男"},{"name":"李四","age":"19","sex":"男"},{"name":"王霸","age":"20","sex":"男"}]'
// JSON.parse()将json字元串轉換為數組 推薦
var arr=JSON.parse(jsonStr);
console.log(arr)
// 方法二:eval() 不推薦
var arr=eval(jsonStr);
console.log(arr)//json字元串轉換為數組
// 方法三JSON.stringify(obj,arr)将數組轉化為字元串
var str=JSON.stringify(json)
console.log(str)//[{"name":"張三","age":18,"sex":"男"},{"name":"李四","age":18,"sex":"男"},{"name":"王霸","age":20,"sex":"男"}]
// 第二個參數為過濾字段,裡面寫需要的字段,相當于篩選字段
var str=JSON.stringify(json,['name','age'])
console.log(str)//[{"name":"張三","age":18},{"name":"李四","age":18},{"name":"王霸","age":20}]
</script>
</body>
</html>
1.5ajax使用Http
3個優點
:可以請求、可以得到資料、得到資料還不用重新整理頁面
通過AJAX,您的js可以受用js的XMLHttpRequest對象之間與伺服器通信
1.6建立Ajax
1.判斷是支援哪種浏覽器
2.根據不同浏覽器進行建立(裡面要寫try..catch)
3.最後去調用就行
1.window.ActiveXObject(版本号)
2.window.XMLHttpRequest()括号裡面沒東西
3.建立ajax
ajax=new XMLHttpRequest();普通浏覽器建立
ajax=new ActiveXObject(version[i]);IE浏覽器建立,需要考慮版本号
try...catch 可以測試代碼中的錯誤。try 部分包含需要運作的代碼,而 catch 部分包含錯誤發生時運作的代碼。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button>發送資料</button>
<script>
// 建立ajax對象
function Ajax(){
var ajax;
// alert(window.XMLHttpRequest)
// 判斷浏覽器是否支援window.XMLHttpRequest對象
if(window.XMLHttpRequest){
try{
//在此運作代碼
ajax=new XMLHttpRequest();
}catch(err){
//處理錯誤,error代表紅色字型
console.error(err)
}
}
// 支援IE,window.ActiveXObject(版本号)
else if(window.ActiveXObject){
try{
var version=[
'Microsoft.XMLHTTP',
'MSXML.XMLHTTP',
'MSXML2.XMLHTTP.3.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.7.0'
];
for(var i=0;i<version.length;i++){
ajax=new ActiveXObject(version[i])
}
}catch(err){
console.error(err)
}
}
// 傳回結果
return ajax;
}
var btn=document.querySelector('button')
btn.onclick=function(){
// 調用
var ajax=Ajax();
console.log(ajax)//XMLHttpRequest {onreadystatechange: null, readyState: 0, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
}
</script>
</body>
</html>
1.7Ajax請求伺服器
1.AJAX向伺服器發送請求的XMlHttpRequest方法
open(方法類型,url位址,是否是異步處理寫true) 比如:open(get,'get.php',true)
ajax.open('GET','getData.php?name=zhangsan',true);用來給後端發送資料
send()給伺服器發送請求,get請求必須有send()方法,send()内寫為null 比如:send(null)
1.8 XMLHttpRequest對象
1.onreadystatechange 屬性:存有處理伺服器響應的函數,每當 readyState 改變時,onreadystatechange 函數就會被執行。
2.responseText 屬性:擷取由伺服器傳回的資料
3. readyState 屬性
readyState
屬性可能的值
狀态 | 描述 |
---|---|
請求未初始化(在調用 open() 之前) | |
1 | 請求已提出(調用 send() 之前) |
2 | 請求已發送(這裡通常可以從響應得到内容頭部) |
3 | 請求進行中(響應中通常有部分資料可用,但是伺服器還沒有完成響應) |
4 | 請求已完成(可以通路伺服器響應并使用它) |
php裡面的方法
1.json_encode()将數組轉換為json字元串
2.echo是輸出的意思
3.$_get是擷取get方式送出的前台資料,$_POST是擷取post方法送出的前台資料
1.9互動例子
前台和背景如何傳值的
前台傳給背景
1.get方法通過open()的url給背景台
2.post方法通過send()方法傳給背景
前台擷取hou值:
1.通過responseText取得值
方式一:get方法
$_GET擷取get方法傳的值
思路
:1.先放到那個軟體的www目錄,然後再複制到hbuilder來
2.請求 ,
get請求必須有send()方法,send内寫null
3.然後再觸發
onreadystatechange
方法
4.必須滿足
readyState==4&& ajax.status==200
才能最後從後端擷取資料
5.前端向後端發送資料隻需要
ajax.open('GET','getData.php?name=zhangsan',true);
6.再後端用echo json_encode($_GET);轉為json字元串
7.前端用JSON.parse()轉為數組就行了
ajax使用步驟或則封裝步驟
(記住)
ajax使用步驟或則封裝步驟
1.建立ajax對象 XMLHttpRequest 或則IE采用ActiveXObject
2.發起HTTP請求 get/post open() send() setRequestHeader()
3.監聽狀态改變 onreadystatechange監聽readystate==4和status==200
4.接受伺服器的響應資料 responseText
5.渲染頁面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button">發送資料</button>
<script type="text/javascript">
// 建立ajax對象
function Ajax(){
var ajax;
// alert(window.XMLHttpRequest)
// 判斷浏覽器是否支援window.XMLHttpRequest
if(window.XMLHttpRequest){
try{
// 建立的代碼
ajax=new XMLHttpRequest();
}catch(err){
//TODO handle the exception
console.error(err)
}
}
// 支援IE浏覽器,還需要考慮版本
else if(window.ActiveXObject){
try{
var version=[
'Microsoft.XMLHTTP',
'MSXML.XMLHTTP',
'MSXML2.XMLHTTP.3.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.7.0'
];
for(var i=0;i<version.length;i++){
ajax=new ActiveXObject();
}
}catch(err){
//TODO handle the exception
console.error(err)
}
}
// 傳回ajax
return ajax;
}
var btn=document.querySelector('button');
btn.onclick=function(){
var ajax=Ajax();
// console.log(ajax)
ajax.onreadystatechange=function(){
// 判斷是否請求成功
if(ajax.readyState==4&&ajax.status==200){
console.log('請求成功')
// responseText為擷取伺服器響應的資料
console.log(ajax.responseText)
var data=JSON.parse(ajax.responseText)
console.log(data)
}
}
// get請求
// open(請求類型,url位址,true)
// send()發送請求資料到伺服器
ajax.open('GET','getData.php?name=zhangsan',true);
// get請求必須有send()方法,send内寫null
ajax.send(null)
}
</script>
</body>
</html>
<?php
// 擷取get請求傳遞的資料
// var_dump($_GET);
// 後端隻要有輸出則為響應的資料
echo '1111';
// echo '伺服器端資料';
// json_encode()将數組轉換為json字元串
// $_GET擷取get傳的值
echo json_encode($_GET);
?>
方式二:post
1.請求頭的content-type四種類型
https://www.cnblogs.com/webDojo/p/9038765.html
1.content-type:application/json 表示我們要傳json字元串
2.application/x-www-form-urlencoded 表示我們要傳鍵值對
2.封裝和請求過程和get
大緻一樣
3.與get的
差別
1.send()前面有請求頭 ajax.setRequestHeader('content-type','application/x-www-form-urlencoded');//傳鍵值對
2.send()裡面寫資料 ajax.send('name=zhangsan&age=18')
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button">發送資料</button>
<script type="text/javascript">
// 建立ajax對象
function Ajax(){
var ajax;
// alert(window.XMLHttpRequest)
// 判斷浏覽器是否支援window.XMLHttpRequest
if(window.XMLHttpRequest){
try{
// 建立的代碼
ajax=new XMLHttpRequest();
}catch(err){
//TODO handle the exception
console.error(err)
}
}
// 支援IE浏覽器,還需要考慮版本
else if(window.ActiveXObject){
try{
var version=[
'Microsoft.XMLHTTP',
'MSXML.XMLHTTP',
'MSXML2.XMLHTTP.3.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.7.0'
];
for(var i=0;i<version.length;i++){
ajax=new ActiveXObject();
}
}catch(err){
//TODO handle the exception
console.error(err)
}
}
// 傳回ajax
return ajax;
}
var btn=document.querySelector('button');
btn.onclick=function(){
var ajax=Ajax();
// console.log(ajax)
ajax.onreadystatechange=function(){
// 判斷是否請求成功
if(ajax.readyState==4&&ajax.status==200){
console.log('請求成功')
// responseText為擷取伺服器響應的資料
console.log(ajax.responseText)//
// var data=JSON.parse(ajax.responseText)
// console.log(data)
}
}
// post請求
ajax.open('POST','postData.php',true)
// 鍵值對的
// 設定請求頭
ajax.setRequestHeader('content-type','application/x-www-form-urlencoded');//傳鍵值對
ajax.send('name=zhangsan&age=18')
// json格式(好像得不到值)
// ajax.setRequestHeader('content-type','application/json ')//傳json字元串
// var data={name:'xuge',age:'21'};
// ajax.send(JSON.stringify(data))
}
</script>
</body>
</html>
<?php
echo 222;
echo json_encode($_POST)
?>
1.10狀态碼
常見http狀态碼(status)
https://www.cnblogs.com/xflonga/p/9368993.html
200
3xx:
301
302
303
304 not modified
4xx:用戶端錯誤
400
401
402
404沒有找到
5xx:伺服器錯誤
500伺服器響應錯誤(記住)
2js使用封裝的ajax
思路:
1. 建立ajax對象
var ajax=new Ajax();
2.用get(url,sendContent,function(data){})或則post(url,sendContent,function(){})接受伺服器的資料
data為伺服器的響應的資料
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button>發送資料</button>
<script src="ajax.js"></script>
<script>
var btn=document.querySelector('button');
btn.onclick=function(){
// 建立ajax對象
var ajax=new Ajax();
console.log(ajax)
//get(url,sendContent,function(data){}),//data為形參 為伺服器響應的資料
ajax.get('getData.php','name=zhangsan&sex=0',function(data){
console.log(data)//{"name":"zhangsan","sex":"0"}
})
// ajax.get('getData.php',{name:'zs',age:18},function(data){
// console.log(data)
// })
// post(url,sendContent,function(){})
// ajax.post('postData.php','name=lisi&age=19',function(data){
// console.log(JSON.parse(data))
// })
// ajax.post('postData.php',{name:'lisi',age:20},function(data){
// console.log(data)
// })
}
</script>
</body>
</html>
2.1擷取天氣資料例子
思路:1.先大概布局
2.擷取php的資料
3.把資料處理了顯示再界面
4.把值渲染到頁面上:拼接法
$('ul').append('<li><div>'+forecast[i].date+'</div><div>'+forecast[i].fengli+'</div><div>'+forecast[i].fengxiang+'</div><div>'+forecast[i].high+'</div><div>'+forecast[i].low+'</div><div>'+forecast[i].type+'</div></li>')
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
div.wrap{
width: 1400px;
height: 400px;
}
ul{
margin-top:40px;
width: 1400px;
height: 400px;
display: flex;
justify-content: space-between;
}
li{
width: 200px;
height: 240px;
list-style: none;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
</style>
</head>
<body>
<button type="button">顯示天氣</button>
<div class="wrap">
<h2>今日天氣<span></span></h2>
<p></p>
<ul>
<!-- <li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li>
<li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li>
<li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li>
<li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li>
<li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li>
<li>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</li> -->
</ul>
</div>
<script src="ajax.js"></script>
<script src="jquery-3.5.1.min.js"></script>
<script type="text/javascript">
var btn=document.querySelector('button');
btn.onclick=function(){
// 建立ajax對象
var xhr=new Ajax();
//用post方法拿到天氣資料,sendContent這裡不需要發送資料
xhr.post('wearth.json','',function(wearthData){
console.log(JSON.parse(wearthData))
$('h2>span').text(JSON.parse(wearthData).data.wendu+'°C')
$('p').text(JSON.parse(wearthData).data.ganmao)
var forecast=JSON.parse(wearthData).data.forecast;
for(var i=0;i<forecast.length;i++){
// 添加li并向裡面添加未來天氣
$('ul').append('<li><div>'+forecast[i].date+'</div><div>'+forecast[i].fengli+'</div><div>'+forecast[i].fengxiang+'</div><div>'+forecast[i].high+'</div><div>'+forecast[i].low+'</div><div>'+forecast[i].type+'</div></li>')
}
})
}
</script>
</body>
</html>
3.jq中ajax的使用
1.url:'',//請求的url位址
2.type:'get',//請求的方式 get或則post
3.data:{},//發送給伺服器的資料,自動被轉為字元串
4.async:true,//是否異步發送,可以省略,預設true
5.dataType:'json',//伺服器傳回的資料類型 jsonp常用作跨域
6.success:function(werath){//成功時傳回伺服器的資料,傳回了一個對象
}
7.error:function(err){//失敗時觸發
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="zuoye/jquery-3.5.1.min.js"></script>
<script>
$(function(){
$.ajax({
url:'wearth.json',//請求的url位址
type:'get',//請求的方式 get或則post
data:{},//發送給伺服器的資料,自動被轉為字元串
async:true,//是否異步發送,可以省略,預設true
dataType:'json',//伺服器傳回的資料類型 jsonp常用作跨域
success:function(werath){//成功時傳回伺服器的資料,傳回了一個對象
console.log(werath)
},
error:function(err){//失敗時觸發
console.error(err)
}
})
})
</script>
</body>
</html>
4擷取api資料
思路:
1.找到免費的api,複制php
2.把wam那個軟體的php拓展打開
3.在前端拿到資料,用append()渲染到頁面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
</style>
</head>
<body>
<h2>驗證碼</h2>
<ul>
</ul>
<script src="jquery-3.5.1.min.js"></script>
<script>
// 出現同源政策錯誤 :浏覽器會有一個保護機制,禁止去通路不同域的内容
$(function(){
$.ajax({
url:'zhiwu.php',
type:'post',
data:{},
success:function(data){
console.log(JSON.parse(JSON.parse(data)).result.fileName)
var pic=JSON.parse(JSON.parse(data)).result.fileName;
$('ul').append('<img src='+pic+'>')
},
error:function(error){
console.error(error)
}
})
})
</script>
</body>
</html>
<?php
$method = "POST";
$url = "https://api.apishop.net/common/verify/getSimpleVerifyImage";
$headers = NULL;
$params = array(
"apiKey"=>"KPd8ixXe9c15ecfdb47c425fcd0b8293595ca0017402c86",
"codeType"=>"6"
);
$result = apishop_curl($method, $url, $headers, $params);
If ($result) {
$body = json_decode($result["body"], TRUE);
$status_code = $body["statusCode"];
If ($status_code == "000000") {
//狀态碼為000000, 說明請求成功
echo json_encode($result["body"]);
} else {
//狀态碼非000000, 說明請求失敗
echo "請求失敗:" . $result["body"];
}
} else {
//傳回内容異常,發送請求失敗,以下可根據業務邏輯自行修改
echo "發送請求失敗";
}
/**
* 轉發請求到目的主機
* @param $method string 請求方法
* @param $URL string 請求位址
* @param null $headers 請求頭
* @param null $param 請求參數
* @return array|bool
*/
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)
{
// 初始化請求
$require = curl_init($URL);
// 判斷是否HTTPS
$isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;
// 設定請求方式
switch ($method) {
case "GET":
curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");
break;
case "POST":
curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");
break;
default:
return FALSE;
}
if ($param) {
curl_setopt($require, CURLOPT_POSTFIELDS, $param);
}
if ($isHttps) {
// 跳過證書檢查
curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);
// 檢查證書中是否設定域名
curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);
}
if ($headers) {
// 設定請求頭
curl_setopt($require, CURLOPT_HTTPHEADER, $headers);
}
// 傳回結果不直接輸出
curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);
// 重定向
curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);
// 把傳回頭包含再輸出中
curl_setopt($require, CURLOPT_HEADER, TRUE);
// 發送請求
$response = curl_exec($require);
// 擷取頭部長度
$headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);
// 關閉請求
curl_close($require);
if ($response) {
// 傳回頭部字元串
$header = substr($response, 0, $headerSize);
// 傳回體
$body = substr($response, $headerSize);
// 過濾隐藏非法字元
$bodyTemp = json_encode(array(
0 => $body
));
$bodyTemp = str_replace("", "", $bodyTemp);
$bodyTemp = json_decode($bodyTemp, TRUE);
$body = trim($bodyTemp[0]);
// 将傳回結果頭部轉成數組
$respondHeaders = array();
$header_rows = array_filter(explode(PHP_EOL, $header), "trim");
foreach ($header_rows as $row) {
$keylen = strpos($row, ":");
if ($keylen) {
$respondHeaders[] = array(
"key" => substr($row, 0, $keylen),
"value" => trim(substr($row, $keylen + 1))
);
}
}
return array(
"headers" => $respondHeaders,
"body" => $body
);
} else {
return FALSE;
}
}
?>
5跨域
5.1概念:從一個域通路另外一個域的内容
-
的定義:協定 域名(子域名(主域名之間還有東西)、主域名) 端口号不同域
- 隻要協定 主域名 子域名 端口号有一個不同就是不同域
http與https差別
- http:www.baidu.com與http:www.baidu.sa.com不同域
- http預設通過
傳輸 端口号明文
80
- https通過
進行加密傳輸、端口号為ssl/tls
443
- 主域名www.taobao.com
- 子域名:從主域名分出來的一小塊 比如: www.taobao.sasa.com
- https更安全
5.2同源政策
- 概念:當浏覽器通路存在跨域時,浏覽器會進行限制,這叫同源測略
- 出現情況:目前的web的url和通路的url在不同域
5.3跨域的方式:
1.原生js通過動态建立script标簽,擷取資料
思路:
1.建立一個script标簽
2.在head标簽裡面添加script标簽
3.設定scr
tag.src='請求的url位址?apiKey=您的apiKey&page=參數1&pageSize=參數2&keyword=參數3&callback=callbackfun'
4.定義回調函數傳回伺服器的值
// 回調函數傳回一個資料
function callbackfun(data){
console.log(data)
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button">原生js動态跨域</button>
<script src="jquery-3.5.1.min.js"></script>
<script>
var btn=document.querySelector('button');
btn.onclick=function(){
// 1.建立script标簽
var oscript=document.createElement('script');
// 2.加入head标簽
var head=document.querySelector('head');
head.appendChild(oscript)
// 3.設定src
oscript.src='http://v.juhe.cn/joke/content/list.php?key=c41ad3d93efadae9e2032a422a2d3acf&page=2&pagesize=10&sort=asc&time=1418745237&callback=callbackfun'
}
// 4.定義回調函數傳回伺服器的值
function callbackfun(data){
console.log(data)
}
</script>
</body>
</html>
2.jQuery通過jsonp跨域
關鍵點
1.定義伺服器傳回類型為jsonp
dataType:'jsonp',
2.定義回調函數
jsonp:'callback',
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button>jQuery跨域</button>
<script src="jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function(){
$('button').click(function(){
$.ajax({
url:'http://v.juhe.cn/joke/content/list.php',
type:'get',
data:{
key:'c41ad3d93efadae9e2032a422a2d3acf',
page:1,
pagesize:10,
sort:'asc',
time:1418745237
},
// 1.定義伺服器傳回的類型
dataType:'jsonp',
// 2.定義回調函數
jsonp:'callback',
success:function(data){
console.log(data)
},
error:function(err){
console.error(err)
}
})
})
})
</script>
</body>
</html>
y-3.5.1.min.js">
![image-20210902111713433](https://img-blog.csdnimg.cn/img_convert/bf9d5c8f9d3ef516674c08409c96b2c3.png)