封装Jsonp代码 发表于 2019-03-14 | 分类于 跨域 | jsonp的封装代码: 1234567891011121314151617181920212223242526272829303132function 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)})jsonp('http://localhost/jsonp/server.php', { id: 123 }, function (res) { console.log(res)}) 例子中的server.php代码: 123456789101112131415161718192021222324<?php$conn = mysqli_connect('localhost', 'root', '123456', 'demo');$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 标记对我发送的请求// 一定要返回一段 JavaScriptheader('Content-Type: application/javascript');$result = json_encode($data);$callback_name = $_GET['callback'];echo "typeof {$callback_name} === 'function' && {$callback_name}({$result})"; (完)
v1.5.2