下面用一个百度搜索小例子来给大家演示一下使用jsonp解决ajax跨域的问题
话不多说,直接上代码(注意要把代码放进一个文件夹中啊,不然等会报错没有目录):
<!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>
li:hover{
background: skyblue;
}
a{
text-decoration: none;
color:black;
}
</style>
</head>
<body>
<input type="text" id="searchInput" placeholder="百度一下,你就知道"/>
<ul>
<!-- <li><a href="#">111</a></li>
<li><a href="#">222</a></li>
<li><a href="#">333</a></li>
<li><a href="#">44</a></li>
<li><a href="#">555</a></li> -->
</ul>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
var timeout = null;
// 文本框绑定输入事件
$("#searchInput").on("input",function(){
window.clearTimeout( timeout );
timeout = setTimeout(function(){
// 获取文本框输入的值
var searchVal = $(this).val();
if( searchVal == "" ){
$("ul").empty();
return;
}
// 百度搜索建议词条接口: http://suggestion.baidu.com/su?wd=关键字
// 注意: 需要使用jsonp请求方式,并且需要修改callback参数名称为cb
$.ajax({
url: "http://suggestion.baidu.com/su",
dataType: "jsonp",
// 修改callback参数名称
jsonp: "cb",
data: {
wd : searchVal
},
success: function( res ){
var htmlStr = ``;
res.s.forEach( function( item ){
htmlStr += `<li><a href="https://www.baidu.com/s?wd=${item}" target="_blank">${item}</a></li>`;
});
$("ul").html( htmlStr );
}
});
// 百度搜索结果: http://www.baidu.com/s?wd=关键字
}.bind( this ), 200 );
});
</script>
</body>
</html>
然后右键用Live Server打开:
注意,可能有些小伙伴的vscode右键没有Live Server这个选项,很简单,在扩展中安装一个呗,方法如下:
运行起来后即可模拟百度输入框:
随便点击一个即可跳转:
效果就是这样,这里用jquery的jsonp解决跨域的,有不懂的小伙伴请在下方留言哦。
发表评论