JSONP实例

本文提供两个JSONP的实例,包括原生JavaScript通过`<script>`标签实现跨域请求数据,以及使用jQuery的`$.ajax()`方法进行跨域请求。同时推荐了一个提供免费数据接口的网站,供调用测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于JSON和JSONP,网上已经有很多文章有介绍了,在这里我只贴出来两个应用实例。

html代码:

<div id="wrapper">
    <div id="searchBar">
        <input type="text" maxlength="50" id="input">
        <span id="btn">
          <input type="button" value="搜索一下" onclick="doSearch()">
        </span>
    </div>
    <p id="title">搜索结果:</p>
 </div>

css代码:

<style>
      body {
        margin: 0;
        padding: 0;
      }
      #wrapper {
        text-align: center;
        padding-top: 100px;
      }
      #searchBar {
        display: inline-block;
      }
      #input {
        width: 300px;
        height: 20px;
        padding: 9px 7px;
        border: 1px solid #b8b8b8;
        border-right: 1px solid #38f;
        outline: none;
        vertical-align: top;
      }
      #btn {
        border: 1px solid #38f;
        margin-left: -5px;
        display: inline-block;
        vertical-align: top;
      }
      #btn input {
        width: 102px;
        height: 38px;
        border: none;
        background: #38f;
        cursor: pointer;
        font-size: 14px;
        color: #fff;
      }
      #btn input:hover {
        background-color: #317ef3;
        border-color: #317ef3;
      }
      #title {
        font-size: 12px;
      }
      ul {
        list-style: none;
      }
      li {
        padding: 10px 0;
      }
    </style>
  • 实例一:原生js通过script跨域请求数据
<script>
        //数据查询主函数
      function doSearch() {
        var input = document.getElementById('input');
        var inputVal = input.value;
        //inputVal:查询参数; getJsonp:后台返回的函数名
        var url = "https://suggest.taobao.com/sug?code=utf-8&q="+inputVal+"&callback=getJsonp";
        var script = document.createElement('script');
        script.setAttribute('src', url);
        document.getElementsByTagName('head')[0].appendChild(script);
      }
      //声明 数据解析函数
      var getJsonp = function(data) {
        var wrapper = document.getElementById('wrapper');
        var oldUl = document.getElementsByTagName('ul')[0];
        if (oldUl) {
          oldUl.parentNode.removeChild(oldUl);
        }
        var Ul = document.createElement('ul');
        var result = data.result;
        if (result.length) {
          for (var i = 0; i < result.length; i++) {
            var Li = document.createElement('li');
            Li.innerHTML = result[i][0] + '的条数有:'+ result[i][1] + '条';
            Ul.appendChild(Li);
          }
        } else {
          var Li = document.createElement('li');
          Li.innerHTML = '搜索结果为空!';
          Ul.appendChild(Li);
        }
        wrapper.appendChild(Ul);
      };

      var input = document.getElementById('input');
      // input.addEventListener('change', function(e) {
      //   console.log(e.target.value);
      // });
      input.addEventListener('keydown', function(e) {
        if (e.key === 'Enter') {
          doSearch();
        }
      })
    </script>

  • 实例二:通过jQuery的$.ajax()方法跨域请求数据
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
......
<script>
        //数据查询主函数
      function doSearch() {
        var inputVal = $('#input').val();
        $.ajax({
          url: "https://suggest.taobao.com/sug?code=utf-8&q="+inputVal+"&callback=getJsonp",
          type: 'GET',
          dataType: 'jsonp',
          success: function(data) {
            getJsonp(data)
          }
        });
      }
      var getJsonp = function(data) {
        $('#wrapper').children('ul').remove();
        $('#wrapper').append('<ul></ul>');
        var result = data.result;
        if (result.length) {
          for (var i = 0; i < result.length; i++) {
              //es6写法可能导致浏览器不支持
            $('ul').append(`<li>${result[i][0]}的条数有:${result[i][1]}条</li>`)
          }
        }
      };

      $('#input').bind('keydown', function(e) {
        if (e.key === 'Enter') {
          doSearch();
        }
      })
    </script>

推荐一个很nice的网页:免费数据接口,里面有各种类型的接口可供调用测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值