老师请解答​百度联想词的接口问题

老师请解答​百度联想词的接口问题

<!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>

http://img1.sycdn.imooc.com//climg/5d7c78540963554c07150256.jpg

http://img1.sycdn.imooc.com//climg/5d7c78540926431a10180108.jpg

http://img1.sycdn.imooc.com//climg/5d7c785409cfafac19070385.jpg


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好!

在network中:

http://img1.sycdn.imooc.com//climg/5d7e03a809cc06f611890645.jpg

另,同学是说这种接口是哪里来的对吗?实际开发中是后台提供的,也有的是自己找一些第三方的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
    老师, 这种https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=&cb=接口在控制台network怎么找?我找的是上面图中那个,请问老师这个怎么找? 我只知道留下wd(后面接要搜索的内容)和留下cb(接的是回调函数名称)
    2019-09-15 11:45:54
卡布琦诺 2019-09-14 16:00:06

不是很理同学描述的问题,建议再详细描述一下哦

祝学习愉快!

  • 提问者 海绵弟弟 #1
    就是我写了一个输入框,输入的内容自动弹出联想词的功能,就类似百度的搜索,但是代码有问题,实现不了,具体代码问题在上述写出了,接口的地址还有获取的返回值问题,请老师修改一下代码
    2019-09-14 16:07:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师