用jquery怎么封装JSONP呢?

用jquery怎么封装JSONP呢?

这个是用原生js进行封装的吧,用jquery要怎么封装呢?我也想了解一下
视频老师在课前说还要用jquery封装一次,课全讲完了也没见到,麻烦老师帮忙写个用jquery封装的给我看看?

正在回答 回答被采纳积分+1

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

5回答
好帮手慕星星 2020-09-24 19:09:04

同学你好,如果要跟后端约定叫callback,那么需要后端改接口,改为callback,前端拼接的时候才能写为callback。

课程中jsonp也是规定好的,老师说虽然可以修改(在没有规定的情况下),但是当前接口不可以

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

自己可以试试。

  • 提问者 人生的起源 #1
    你还是没明白我在问什么,先这样吧,谢谢了
    2020-09-24 19:12:22
好帮手慕星星 2020-09-24 18:14:55

同学你好,问题解答如下:

1、jsonp是约定好的,口头约定或者文档约定都可以,前端不可以修改。后端在写接口的时候就固定了,按照规定好的写就行。如果想更改,让后端去改。

2、$.ajax()中参数也是固定的,没有办法添加随机生成函数名,参考文档:

https://www.html.cn/jqapi-1.9/jQuery.ajax/

祝学习愉快!

  • 提问者 人生的起源 #1
    那加入我要跟后端约定叫callback呢?总不会每个都叫jsonp吧,原生里那个'?jsonp'不就是自己写上去的,想改什么可以改啊
    2020-09-24 18:17:28
好帮手慕星星 2020-09-24 13:55:03

同学你好,问题解答如下:

1、意思是想更换jsonp还是更换abc呢?

课程中给出的接口,后台规定是jsonp,所以不能更换;abc可以是随机的,老师第一次粘贴的图片中就是完整的示例

  <script type="text/javascript">
    function getJSONP(url) {

        var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'h', 'j'],
            r1 = Math.floor(Math.random() * 10),
            r2 = Math.floor(Math.random() * 10),
            r3 = Math.floor(Math.random() * 10),
            name = 'getJSONP' + a[r1] + a[r2] + a[r3],
            cbname = 'getJSONP.' + name;

        // 判断url地址中是否含有?号
        if (url.indexOf('?') === -1) {
            url += '?jsonp=' + cbname;
        } else {
            url += '&jsonp=' + cbname;
        }
        getJSONP[name] = function(data) {
            try {
                console.log(data)
            } catch (e) {
                //
            }
        }

        // jquery中ajax使用方式
        $.ajax({
            url: url,
            type: "GET",
            // 类型是jsonp
            dataType: "jsonp"
        })
    }
    getJSONP('http://class.imooc.com/api/jsonp');
    </script>

2、jQuery跨域和原生js跨域是两种不同的方式,所以不需要删除script标签和函数。随机函数名参数上面示例。

祝学习愉快~

  • 提问者 人生的起源 #1
    1、想更换jsonp,不是abc 2、随机函数名想在$.ajax()里生成 我现在问的都是用$.ajax()这个方法里该怎么写,原生的已经看懂了,谢谢
    2020-09-24 18:02:53
  • 提问者 人生的起源 #2
    再补充一下,你说跟程序员约定好是jsonp不能更换,假如想跟程序员约定其它名称呢,在$.ajax()里该写在哪?原生我是知道怎么改的,视频里都有说
    2020-09-24 18:05:11
好帮手慕星星 2020-09-24 11:50:38

同学你好,例子如下:

 <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
    function getJSONP(url) {
        // jquery中ajax使用方式
        $.ajax({
            url: url,
            type: "GET",
            // 类型是jsonp
            dataType: "jsonp",
            // 回调函数是abc
            jsonpCallback: "abc",
            success: function(data) {
                console.log(data)
            }

        })
    }
    getJSONP('http://class.imooc.com/api/jsonp?jsonp=abc');
    </script>

结果:

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

自己测试下,祝学习愉快!

  • 提问者 人生的起源 #1
    谢谢,还两个问题: 1、?jsonp=abc里的jsonp想指定其它名称要怎么写? 2、用$.ajax()需要像原生那样及时删除script标签和函数吗?需要的话要怎么删除,随机函数名又该怎么写? 问题多了点,希望老师不要介意
    2020-09-24 11:59:07
好帮手慕星星 2020-09-24 11:33:05

同学你好,jQuery中不需要封装,设置datatype属性值为jsonp就可以跨域。例如

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

课程中提供的地址还是需要回调函数的,所以前面的代码可以复制粘贴。输出结果

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

自己测试下,祝学习愉快!

  • 提问者 人生的起源 #1
    老师能根据视频中的例子,完整的写一个给我吗?
    2020-09-24 11:39:53
  • 提问者 人生的起源 #2
    比如我现在就想看到视频中打开的http://class.imooc.com/api/jsonp?jsonp=abc这个地址里的数据,用$.ajax()该怎么写?
    2020-09-24 11:42:38
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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