动态创建 script 实现跨域请求数据

时间:2023-03-09 00:12:34
动态创建 script 实现跨域请求数据

动态创建script标签 (由事件触发)

在我们需要请求数据的时候我们就可以动态的创建 script 标签 src设置为我们需要请求数据的地址 另外我们可以附加参数 ?后面附加参数 例如 :?参数=1&callbacl=cb    我们还可以指定回调函数 回调函数就是我们在得到数据之后需要做什么处理

给这个函数传一个参数 即我们想要的数据

  

btn.onclick=function(){
       var value = numbers.value;     // 必须在点击事件之后获取 这样或取得才是当前的 值
var script = document.createElement("script"); // 穿件一个script 标签
script.src = "http://10.80.1.23/PHP/ajax/logistics/logistics.php?kuaidi_id="+value+"&callback=show"; // 把script的src设置为我们请求数据的地址并传递参数 和回调函数
document.body.appendChild(script); // 把script 插入到body里面
}

  

  这里提到一点问题 就是我们的scrript  标签是动态的插入到body的末尾的 如果你的script事写在body下面的 而这时 刚好 你是在 callback函数外面获取的页面元素 在callback里面进行操作就会完全无效

  解决办法 就是 把你的 script也写在body里面 或者 在callback里面获取元素并进行操作。

  

php文件是怎么样的呢 大概就是这样的

<?php
$kuaidi = array();
$kuaidi["1000"] = array(
"info" => '王小三的快递',
'status' => '配送中',
);
$kuaidi["1001"] = array(
"info" => '王三的快递',
'status' => '配送中',
);
$kuaidi["1002"] = array(
"info" => '张三的快递',
'status' => '已配送',
);
/* * 传送方式 GET
* 参数 kuaidi_id 需要查询的快递单号
* callback 回调函数名
* */
if(!empty($_GET["kuaidi_id"])){
//如果没有传回调函数
if(empty($_GET["callback"])){
echo json_encode($kuaidi[$_GET["kuaidi_id"]]);
}else{
//如果有回调函数 那么输出 jsonp
echo $_GET["callback"]."(".json_encode($kuaidi[$_GET["kuaidi_id"]]).")";
}
}
?>

  

  完整的html代码

  

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="text" name="number" id="number" value="" />
<p id="info"></p>
<input type="button" name="" id="btn" value="查询" /> <script type="text/javascript">
var btn = document.getElementById("btn");
var numbers = document.getElementById("number");
var info = document.getElementById("info");
btn.onclick=function(){
var value = numbers.value;
var script = document.createElement("script");
script.src = "http://10.80.1.23/PHP/ajax/logistics/logistics.php?kuaidi_id="+value+"&callback=show";
document.body.appendChild(script);
}
function show(val){ // 插入数据
info.innerText ="姓名:" + val.info + " 状态:" + val.status;
}
</script>
</body> </html>