老师请解答百度联想词的接口问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>demo</title>
<style>
input{
width: 500px;
}
ul{
display: none;
width: 500px;
border:1px solid #ccc;
}
</style>
</head>
<body>
<input type="text"></input>
<ul></ul>
<script>
var input = document.getElementsByTagName('input')[0];
var oUl = document.getElementsByTagName('ul')[0];
input.oninput = function (){
var value = this.value;
var oScript = document.createElement('script');
oScript.src = 'https://www.baidu.com/sugrec?wd=' + value + '&cb=doJson';
//这里的地址怎么寻找,我找的这个好像有问题
document.body.appendChild(oScript);
}
function doJson(data){
console.log(data);
var q = data.q;
//在网上查的都是获取有一个S变量,但是根据我自己查的这些数值都是放在变量q里面了,而且整个在一个g的数组里?
var str = '';
if (q.length > 0) {
q.foreach(function(ele,index){
str = '<li>'+ ele + '</li>';});
oUl.innerHTML = str;
oUl.style.display = 'block';
}else{
oUl.style.display = 'none';
}
}
</script>
</body>
</html>


3
收起
正在回答
3回答
同学你好!
在network中:

另,同学是说这种接口是哪里来的对吗?实际开发中是后台提供的,也有的是自己找一些第三方的api使用。
如果帮助到了你,欢迎采纳,祝学习愉快~
樱桃小胖子
2019-09-14 19:24:27
同学是想实现如下这种效果么?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style>
ul,li{
list-style: none;
margin: 0;
padding: 0;
}
li{
line-height:30px;
font-size:16px;
padding:5px 10px;
}
li.current{
background:#CCCCCC;
color:#0000FF;
cursor: pointer;
}
li:hover{
background:#CCCCCC;
color:#0000FF;
cursor: pointer;
}
</style>
<input type="text" id="txt" />
<input type="button" id="btn" value="百度一下" />
<div class="box" id="box">
<ul>
</ul>
</div>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
//百度的搜索接口,整理以后的接口https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=&cb=
//这部分是根据输入框中的事件来做的事情
//使用keyup来判断是否要发送请求,如果使用keydown会发现输入一个词后要再按一下键盘才能发送请求获取数据,使用keyup在输入完词以后就会立即发送请求
var now = -1; //声明一个变量值为-1,在使用上下键的时候记录li的序号
var resLength = 0; //存li的长度
$('#txt').keyup(function(event) {
if (event.keyCode == 38 || event.keyCode == 40) { //每按一次上下键都会发送一次请求,所以要先
return; //清除一遍请求
};
console.log(event.which)
var dat = {
wd: $('#txt').val()
};
if ($('#txt').val() != '') { //当输入框的值不为空的时候才能发送请求
$.ajax({
type: "get",
url: "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
async: true,
data: dat,
dataType: 'jsonp', //已经跨域了
jsonp: 'cb', //百度的回调函数
success: function(res) {
console.log(res.s);
for (var i = 0; i < res.s.length; i++) {
resLength = res.s.length;
oli_i = $('<li>' + res.s[i] + '</li>');
console.log(oli_i)
$('#box ul').append(oli_i);
//要实现点击某一条词的时候也能让输入框中出现点击的这条词,所以要在success里面设置
$('#box ul li').eq(i).click(function() {
$('#txt').val($(this).text());
$(this).addClass('current').siblings().removeClass('current')
})
};
},
error: function(res) {
console.log(res)
}
});
} else {
$('#box ul').html('') //如果输入框的词都删除了,把获取的数据结果也清空,因为已经获取到数据了,即使阻止再次发送请求也不会把已经获得的数据清除,所以这里直接用了最简单的办法,直接清空数据
};
});
//在输入框中按上下键的时候对应的每一条数据的样式要有改变,这里使用了keydown这个事件足够了
$('#txt').keydown(function(ev) {
if (ev.keyCode == 40) { //按下键时,now应该变大
now++;
$('#box ul li').eq(now).addClass('current').siblings().removeClass('current')
$('#txt').val($('#box ul li').eq(now).text())
//resLength表示的是长度,now表示的是序号,所以要用resLength-1
if (now == resLength - 1) {
now = -1; //当选择的数据已经到了最底部的时候,就要从顶部开始重新循环,所以now又回到-1
}
};
if (ev.keyCode == 38) {
now--; //按上键的时候,光标往上走,所以now减小
$('#box ul li').eq(now).addClass('current').siblings().removeClass('current');
$('#txt').val($('#box ul li').eq(now).text())
if (now < -1) {
now = resLength - 1 //当光标走到最上面的时候,再循环到底部重新往上走
};
};
if (ev.keyCode == 13) { //当按下回车的时候,应该开始查询具体的结果了,所以这里用的是百度查询的接口
window.open('https://www.baidu.com/s?wd=' + $('#txt').val())
$('#txt').val('');
$('#box ul').html('')
}
})
//点击百度一下这个按钮的时候也要实现跳转页面
$('#btn').click(function() {
if ($('#txt').val() != '') {
window.location.href = 'https://www.baidu.com/s?wd=' + $('#txt').val()
$('#txt').val('');
$('#box ul').html('')
};
})
</script>
</body>
</html>祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星