美文网首页JQuery让前端飞Web前端之路
利用 jsonp 实时获取搜索数据

利用 jsonp 实时获取搜索数据

作者: 大白杏仁 | 来源:发表于2017-12-24 23:47 被阅读56次

我们经常在搜索框输入文字时,不需要点击搜索,下面就可以实时显示搜索到的相关信息。之前觉得这个功能提高了很大效率很炫酷,接触了前端发现原来实现也很简单。

jsonp的东西我自己是讲不清的毕竟是个了解。通常用 Ajax 在不刷新页面的情况下刷新局部页面,但是 Ajax 只能请求跟网页同一个服务器里的资源,所以要用到可以跨域请求的 jsonp,简而言之就是可以在某一网页中随意请求其他服务器里的资源,来局部更新当前页面。

1. 结果(非常简陋):

示例

2. 简单步骤:

  1. 监听输入框输入文字
  2. 利用 jsonp 调用 360搜索 并获得结果
  3. jquery 操作 DOM 显示搜索结果

3. 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script  src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
    <script>
        $(function() {
            // keyup 监听输入框
            $('.input').keyup(function() {
                var input = $(this).val();

                $.ajax({
                    url: 'https://sug.so.360.cn/suggest?encodein=utf-8&encodeout=utf-8',
                    type: 'GET',  // 请求类型
                    dataType: 'jsonp',
                    data: { word: input}
                })
                .done(function(data) {
                    response = data.s;  // 获取返回结果
                    $('.con').empty();  // 清空输入框
                    // 把所有结果添加到列表
                    for (var i = 0; i < response.length; i++) {
                        var $li = $('<li>' + response[i] + '</li>');
                        $('.con').append($li);
                    }
                })
                .fail(function() {
                    alert('error');
                });
                
            });
        });
    </script>
</head>
<body>
    <input type="text" class="input">
    <ul class="con"></ul>
</body>
</html>

4. 说明:

  1. jqueryjsonp 封装在 ajax 中,两者其实毫无关系,只是用起来更方便更舒服
  2. 传递的 url 可以自己在浏览器控制台获取,同理可以获取其他浏览器的
    url 做个不同版本的搜索
  3. data 以键值对的形式传递数据:键 word是抓取360搜索时得到的 url ,是固定的;比如360搜索 ‘1’ 时得到 url :https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=1word=1就是传递过去的数据,另外要加上 encodein=utf-8&encodeout=utf-8 ,不然 jsonp 输入中文时返回结果会是乱码
  4. .done 方法在成功获得数据时执行,.fail 方法在产生错误时执行
  5. .done 方法里获取 data.s 才可以得到想要的搜索结果,是因为服务器返回的完整数据是这样的 (比如搜索 ‘1’)
jQuery172023165242407540276_1514127784930({q:"1",p:true,s:["163",
    "1688阿里巴巴批发网","1688",
    "163邮箱登录","1688阿里巴巴","12306网上订票官网",
    "12306","126","126邮箱登录","139邮箱登录"]});

总的来说还是灰常简单滴~


Nicelle Beauchene
New York, United States

相关文章

  • 利用 jsonp 实时获取搜索数据

    我们经常在搜索框输入文字时,不需要点击搜索,下面就可以实时显示搜索到的相关信息。之前觉得这个功能提高了很大效率很炫...

  • 实现跨域的方法

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

  • jsop跨域获取数据

    想着试试用jsonp跨域获取数据看看,原理看了很多次了,利用新建script标签设置src属性最后追加到body中...

  • vue起步(2)之数据交互

    vue中的交互(ajax,jsonp) vue中也存在像ajax和jsonp的数据交互,实现向服务器获取数据,但是...

  • 跨域

    JSONP跨域 原理:利用html标签script,来引用不同域名下的JS文件,用一个回掉函数,来获取后端数据,从...

  • OpenSearch:轻松构建大数据搜索服务

    随着互联网数据规模的爆炸式增长,如何从海量的历史、实时 数据中快速获取有用信息,变得越来越具有挑战性。搜索是获取信...

  • 前端开发之路--常见的跨域问题解决方案二

    原生JS实现JSONP JSONP解决方法。就是利用script标签的src属性去加载数据。每当需要跨域请求数据的...

  • Apache Doris在京东搜索实时OLAP中的应用实践

    1、前言 本文讨论了京东搜索在实时流量数据分析方面,利用Apache Flink和Apache Doris进行的探...

  • 利用JSONP跨域获取天气数据

    免费接口很少有一直比较稳定的,经过简单调查,这里选用了心知天气API,免费版:400次/小时,也就是9600次/天...

  • 使用Logstash同步mysql数据到Elasticsearc

    为了使海量数据能够提供实时快速的查询,mysql很显然力不从心,于是我们需要利用es提供大数据搜索服务,典型的场景...

网友评论

    本文标题:利用 jsonp 实时获取搜索数据

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