美文网首页
使用jsonP实现豆瓣图书的搜索

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

作者: seporga | 来源:发表于2017-07-07 15:35 被阅读0次

本次用到的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>

效果图:

搜索结果:


搜索结果

翻页:

翻页

相关文章

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

    本次用到的jsonP接口: 请求回调与与关键词匹配的内容http://api.douban.com/book/su...

  • vue调用百度接口实现输入匹配关键词

    百度使用的jsonp接口,按照jsonp的方法即可实现百度搜索的功能。 搜索 get(ev) {this.baid...

  • 实现跨域的方法

    不同域下的接口获取数据,可以使用jsonp和cors。(ie10以下可以使用jsonp获取数据) jsonp实现跨...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

  • javascript和jQuery分别实现jsonp跨域请求

    本文以豆瓣网上的接口数据为例演示jsonp的跨域请求,具体实现原理不再赘述,不懂得请先百度jsonp的原理后再来看...

  • 手写Ajax(JSONP)

    参考:原生 JavaScript 实现 AJAX、JSONP XMLHttpRequest的使用 参考:XMLHt...

  • JSONP原理

    只要说到跨域,就必须聊到JSONP,就必须讲一下JSONP的实现原理,以及在项目中哪个需求使用了JSONP,简单讲...

  • vue音乐APP03:jsonp promise化

    1.JSONP的用途和原理 使用JSONP主要是目的通过动态创建Script,动态拼接url,进而抓取数据,实现跨...

  • Ajax下

    一、cors跨域请求 二、jsonp百度搜索的例子 jsonp.html jsonp.js

网友评论

      本文标题:使用jsonP实现豆瓣图书的搜索

      本文链接:https://www.haomeiwen.com/subject/wwqrcxtx.html