记录:封装实现跨域的代码

客户端部分:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>script => 跨域</title>
</head>
<body>
  <script>
  
    function jsonp (url, params, callback) {
      var funcName = 'jsonp_' + Date.now() + Math.random().toString().substr(2, 5);

      if (typeof params === 'object') {
        var tempArr = [];
        for (var key in params) {
          var value = params[key];
          tempArr.push(key + '=' + value);
        }
        params = tempArr.join('&');
      }

      var script = document.createElement('script')
      script.src = url + '?' + params + '&callback=' + funcName;
      document.body.appendChild(script);

      window[funcName] = function (data) {
        callback(data);

        delete window[funcName];
        document.body.removeChild(script);
      };
    }


    jsonp('http://localhost/jsonp/server.php', { id: 123 }, function (res) {
      console.log(res);
    });
  </script>
</body>
</html>

 

服务端部分:

<?php

$conn = mysqli_connect('localhost', '***', '*****', '***');

$query = mysqli_query($conn, 'select * from users');

while ($row = mysqli_fetch_assoc($query)) {
  $data[] = $row;
}

if (empty($_GET['callback'])) {
  header('Content-Type: application/json');
  echo json_encode($data);
  exit();
}

// 如果客户端采用的是 script 标记对我发送的请求
// 一定要返回一段 JavaScript
header('Content-Type: application/javascript');
$result = json_encode($data);

$callback_name = $_GET['callback'];

echo "typeof {$callback_name} === 'function' && {$callback_name}({$result})";
 

 

转载于:https://my.oschina.net/u/3848851/blog/1838325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值