jQuery中jsonp的使用


首先來編寫一段代碼就是利用 Jquery 來請求服務器的數據

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
</head>
<body>
<script src="../js/jquery-1.12.4.js"></script>
<script>
    $.ajax({
        url: "http://127.0.0.1/Jquery/22-jsonp.php",
        data: {
            "teacher": "BNTang",
            "age": 34
        },
        success: function (msg) {
            console.log(msg);
        }
    });
</script>
</body>
</html>

22-jsonp.php

<?php
// 0.拿到傳遞過來的數據
$teacher = $_GET["teacher"];
$age = $_GET["age"];
$arr = array("name" => $teacher, "age" => $age);
$data = json_encode($arr);
?>

利用 idea 打開 index.html 運行結果如下圖:

image-20211112001031319

發現產生了跨域,接下來就是這次要介紹了利用 Jquery 使用 jsonp 來解決跨域訪問數據問題,可以通過設置一個 dataType 來告訴 Jquery 要使用 jsonp 如下:

dataType: "jsonp",

image-20211112001217066

添加了之后然后在訪問瀏覽器發現跨域的錯誤已經沒有了:

image-20211112001335132

然后緊接着查看一下我們發送出去的 Ajax 請求,如下圖:

image-20211112001409980

如上圖我框出來的內容就是 Jquery 發送的 jsonp 的請求設置的請求回調函數,我們可以在服務器當中以這個 key 來進行獲取然后返回這么一個回調函數回去如下:

修改 22-jsonp.php

<?php
// 0.拿到傳遞過來的數據
$teacher = $_GET["teacher"];
$age = $_GET["age"];
$arr = array("name" => $teacher, "age" => $age);
$data = json_encode($arr);

// 1.拿到回調函數的名稱
$cb = $_GET["callback"];
// 2.返回數據
echo $cb . "($data);";
?>

然后緊接着瀏覽器再次請求測試結果如下圖所示:

image-20211112002531470

如果你想讓服務器端根據你指定函數名稱來進行設置的話,可以通過一個 jsonp 的屬性來進行設置,告訴 jQuery 服務器在獲取回調函數名稱的時候需要用什么 key 來獲取:

jsonp: "cb",

image-20211112002734007

更改服務器 php 代碼,我這里不在貼服務 php 文件的名稱了更改的內容如下:

<?php
// 0.拿到傳遞過來的數據
$teacher = $_GET["teacher"];
$age = $_GET["age"];
$arr = array("name" => $teacher, "age" => $age);
$data = json_encode($arr);

// 1.拿到回調函數的名稱
$cb = $_GET["cb"];
// 2.返回數據
echo $cb . "(" . $data . ");";
?>

測試方式還是同上,如果你想要你發送給服務器的回調函數名稱為你自己指定的名稱可以通過一個,jsonpCallback 的屬性來進行指定,也就是告訴 jQuery 服務器在獲取回調函數名稱的時候回調函數的名稱是什么:

jsonpCallback: "BNTang",

image-20211112003439153

瀏覽器請求效果如下圖所示:

image-20211112003413408

End


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM