ajax 第十七节 AJAX-jsonp的实现原理

  1. jsonp是一种跨域通信的手段,它的原理其实很简单:

    1. 首先是利用script标签的src属性来实现跨域。

    2. 通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,实现服务器端向客户端通信。

    3. 由于使用script标签的src属性,因此只支持get方法

  2. 演变方法1

 

 

 ==========index.html================

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #result {
            width: 300px;
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>

<body>
    <div id="result"></div>
    <script src="../js/app.js"></script>
</body>

</html>
 
=======================server.js===============================
 
const data = {
    name: 'DX3300123'
}
function handle(data) {
    const result = document.getElementById('result');
    result.innerHTML = data.name;
}
handle(data)

 

  1. 演变方法2

  

 

 ====================index.html=======================

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #result {
            width: 300px;
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>

<body>
    <div id="result"></div>
    <script>
        function handle(data) {
            const result = document.getElementById('result');
            result.innerHTML = data.name;
        }
    </script>
    <script src="../js/app.js"></script>
</body>

</html>
======================server.js ======================
const data = {
    name: 'DX33'
}

handle(data)
  1. 演变方法3

  

 

 

 =================index.html=====================

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #result {
            width: 300px;
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>

<body>
    <div id="result"></div>
    <script>
        function handle(data) {
            const result = document.getElementById('result');
            result.innerHTML = data.name;
        }
    </script>
    <script src="http://127.0.0.1:8000/jsonp-server"></script>
</body>

</html>
 
=====================server.js ======================
const { request, response } = require('express');
const express = require('express');
const app = express();

app.all('/jsonp-server', (request, response) => {
    response.send('console.log("hello world jsonp")');
})

app.listen(8000, () => {
    console.log('服务已经启动,8000端口监听中.......');
})
  1. 演变方法4

  

 

 

 ==============index.html===================

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #result {
            width: 300px;
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>

<body>
    <div id="result"></div>
    <script>
        function handle(data) {
            const result = document.getElementById('result');
            result.innerHTML = data.name;
        }
    </script>
    <script src="http://127.0.0.1:8000/jsonp-server"></script>
</body>

</html>
=========================server.js ===========================
const { request, response } = require('express');
const express = require('express');
const app = express();

app.all('/jsonp-server', (request, response) => {
    const data = { name: 'DX33 hello world' };
    let str = JSON.stringify(data);
    //模板字符串,此处使用的是返引号
    response.send(`handle(${str})`);
})

app.listen(8000, () => {
    console.log('服务已经启动,8000端口监听中.......');
})

 

 
posted @ 2021-11-08 22:27  金在线  阅读(176)  评论(0编辑  收藏  举报