使用jsonP实现豆瓣图书的搜索

本次用到的jsonP接口:

  1. 请求回调与与关键词匹配的内容
    http://api.douban.com/book/subjects?q=关键词&alt=xd&callback=回调函数(fn1)

2.设置每页显示条数(max-result)、起始索引(start-index)
http://api.douban.com/book/subjects?q='+oWd.value+'&alt=xd&callback=fn1&start-index=返回的起始(默认为1)&max-results=每页显示的条数(默认为10)

html代码:

<input type="text" id="wd" autofocus>

<input type="button" value="搜索豆瓣" id="btn">
    
<p id="msg"></p>
    
<hr>
    
<div id="list"></div>
    
<ul id="page"></ul>

CSS代码:

<style>
        #list  {
            display: none;
        }

        #list dl{
            border-bottom: 1px dotted darkgoldenrod;
        }

        #list dl:last-child{
            border-bottom: none;
        }

        #page{
            display: none;
            padding-bottom: 70px;
        }

        #page li{
            float: left;
            list-style: none;
            margin-bottom: 5px;
        }

        #page li a{
            padding: 5px 10px;
            border: 1px solid #bf6900;
            margin-right: 5px;
            text-decoration: none;
            line-height:2em;
        }

        #page li a:hover,#page li .active{
            background-color: #bf6900;
            color: white;
        }

        #page li a:active{
            background-color: #bf6900;
        }
    </style>

js代码:

<script>

        //回调函数,用于对数据的处理,必须全局
        function fn1(data) {
            var oMsg = document.getElementById('msg');
            var oList = document.getElementById('list');


            //搜索结果-标题
            oMsg.innerHTML = data.title.$t + ':'+ data['opensearch:totalResults'].$t;

            //搜索结果-内容
            var aEntry = data.entry;
            var html = '';
            for(var i=0;i<aEntry.length;i++){
                html += '<dl><dt>'+aEntry[i].title.$t+'</dt><dd>![]( '+aEntry[i].link[2]['@href']+' )</dd></dl>';
            }
            oList.innerHTML = html;
            oList.style.display = 'block';


            //页码生成
            var oLis='';
            var oPages = data['opensearch:totalResults'].$t/10;
            var oWd = document.getElementById('wd');
            var oPage = document.getElementById('page');

            for(var j =0 ;j<oPages ;j++){
                oLis += '<li><a id="'+j+'" onclick="fn2(this.id)">'+(j+1)+'</a></li>';
//                var oLi = document.createElement('li');
//                var oA =document.createElement('a');
//                oA.innerHTML = j+1;
//                oA[j].onclick = fn2(this.id);
//                oLi.appendChild(oA);
//                oPage.appendChild(oLi);
            }
            oPage.innerHTML = oLis;
            oPage.style.display = 'block';

        }



        //点击页码,展示对应内容
        function fn2(obj){
            var oWd = document.getElementById('wd');

            if (oWd.value!=''){
                var oScript = document.createElement('script');
                oScript.src = 'http://api.douban.com/book/subjects?q='+oWd.value+'&alt=xd&callback=fn1&start-index='+(obj+1)+'&max-results=10';
                document.body.appendChild(oScript);
            }
        }


        //等待DOM完全加载完毕
        window.onload = function () {

            var oWd = document.getElementById('wd');
            var oBtn = document.getElementById('btn');

            //点击搜索按钮,触发jsonP跨域请求
            oBtn.onclick = function () {
                if (oWd.value!=''){
                    var oScript = document.createElement('script');
                    oScript.src = 'http://api.douban.com/book/subjects?q='+oWd.value+'&alt=xd&callback=fn1';
                    document.body.appendChild(oScript);
                }
            }
        }
    </script>

效果图:

搜索结果:


搜索结果

翻页:

翻页
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、文本框为字符型 必填项非空校验: 1、必填项未输入--程序应提示错误; 2、必填项只输入若干个空格,未输入其它...
    许小小晴阅读 4,675评论 0 2
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • [教程]微信小程序之试手豆瓣图书API,有demo有真相2016-10-13转载作者:oopsguy 最近微信小程...
    c14328d5898b阅读 4,917评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 这两天被愤怒一直紧紧的锁着,不停的冲突和争吵,对于婆婆,她的指责评断和攻击直接点爆我,对于舅舅的愤怒发疯攻击,我被...
    金晶花阅读 316评论 0 1