1. 程式人生 > >最原生的jsonp請求

最原生的jsonp請求

廢話不多直接上程式碼,關鍵點都在註釋中。

1、前端的html程式碼

注意觀看sctipt標籤路徑的樣子

//前端程式碼
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <script>
        var response=""
		//傳遞給後臺的函式
        function jsonp_callback_function(res) {
            //從後臺拿到的資料在res中
            response = res;
           // console.log(response);
        }
    </script>
    <script src="http://localhost:3000/api?callback=jsonp_callback_function"></script>
    <div id="dv"></div>
</body>

</html>

2、後端我是用express寫了一個簡單的介面

//後端express程式碼
var express = require("express")
var app = express()

// app.all('*', function (req, res, next) {
//     //設定跨域
//     res.header("Access-Control-Allow-Origin", "*");
//     next();//不能省略
// })
app.get('/api', function (req, res) {
    var data={
        name: "王八",
        age: 100
    }
    //返回的型別必須設定為javascript
    res.type('text/javascript')
    //前端路由中的引數獲取,req.query。
    console.log("query",req.query);
    //這裡的callback是前端定義的,req.query.callback是前端的函式名
    //這裡相當於將返回的資料放到函式的引數中,包裹成一個正常的函式,然後返回給前臺
    //這裡的資料必須轉化為字串,否則傳入一個物件瀏覽器無法解析
    res.send(req.query.callback+'(' +JSON.stringify(data)+')')
})
app.listen(3000)
console.log("listen the port 3000");

記住最重要的一點,jsonp請求返回給前端的是一個可執行的js函式。

這是最最簡單的jsonp請求,其實jquery已經封裝好了一套ajax的jsonp方法,需要的夥伴可以檢視官方文件。