`
IT小菜菜
  • 浏览: 6852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

json、jsonp跨域请求数据小结

    博客分类:
  • ajax
阅读更多

         环境:DotNet4.5 MVC4.0

         最近在做项目的时候遇到跨域请求的问题,主要是对json和jsonp的使用,做个小总结,小的初学,请各位大牛轻虐。

        就环境而言呢,实际上项目是部署在同一服务器上的几个solution,现在的需求是想要访问另一solution中的API,返回Json(model,jsonbehavior.allowget)。满怀自信的写好ajax,type=“get”,data-type=“json”,url=“xxx.xxx.xxx.xxx/api/func",然后处理下success的json数据,append的到页面上,启动,一气呵成,OK,显示正常,发布部署到服务器,浏览,数据为空,呵呵了。

        看了下发现我的电脑用的是IE11,服务器是IE9,浏览器不兼容,好的,找个IE9的电脑,调试下程序,在ajax的error事件里抛出statusTXT,报”NO Tranport“异常,果断问度娘,找到一句话,jquery.support.cors=true;启动,数据出来了,NICE,打完收工。

        第二天bos说IE6报js错误,叫喊蛋碎一地,自己试了下,发现除了IE9+,其他浏览器均无法显示数据,Very Very Nice,然后各种调试,get、post和json、html各种组合,全部NO反应,看来跨域请求json数据还是有点不同的,基于同源策略的蛋疼特性,所以转投jsonp的怀抱。

        研究以后,这里先说明一下jsonp和json的区别,虽然被jquery打包塞进了ajax的数据类型中,不过严格来说jsonp并不是一种数据格式,而是一种数据访问的方式,被某些大牛利用html一些特性做出来主要用于跨域数据传递的解决。由于同源策略的限制,页面使用的资源通常只能访问本域内有的,但是某些标签除外,比如说<script>和<iframe>标签中的src属性,使得它们可以直接跨域调用资源,比如说引用Jquery.min.js,我们可以直接引用google的js,而jsonp就是利用这种特性来进行跨域资源访问的。

        查了查jquery的api,主要多了个callback参数,用于传递回调方法的名称,大爷的,关键部分不说。好吧,先试试,直接把数据格式改成jsonp,启动,JS报错,返回的json数据冒号附近有语法错误,缺少分号”;“。咦,难道是我api里返回的json数据格式冗余?好的,各种精简,没有的全部干掉,需要啥返回啥,再次运行,一样报错,哭好吧,上网查。

        注意到网上的一些处理方法,服务器接到请求后在js里生成类似于<script>object{"xxx":"xxx"}</script>的html语句块,突然意识到上面说的,jsonp是利用<script>的src特性来完成跨域数据访问的,所以这里返回的应该是javascript而不是直接返回json,但是网上是在js里用createElement生成的html,难道我要在Controller里手动拼接?nope,这里用了一个webapi JavaScriptSerializer,使用Serialize方法直接将数据处理为javascript,然后response回去,类似于json api的序列化方法。生成启动,OK,数据出来了,试了搜狗、火狐、360浏览器,全部没有问题,奶奶的,终于可以歇口气了,上个厕所去,回见。

 

补充说明:

       经过一段时间的使用,这里再详细说明一下jsonp的使用特性,上文已经说明,使用jsonp请求json数据实际上实在请求跨域的js资源,你可以返回字符串,datatable等等,那么返回的数据会作为js加载到页面当中,比如说我返回一个string:“hello world”,那么实际上在页面的脚本上添加了下面这样的东西。

<script>
 hello world
</script>
 同样,如果我们json的数据那么它在页面加载的结果就是:
<script>
{string:"hello world"}
</script>
 显而易见,这必然是报错的结果,我们肯定不能直接在写js的时候写一个字符串上去,那么如何解决这个问题,这就是为什么要传一个callback参数过去。如何把这个字符串放到js上而且不报错,还要为我们所用,那么需要我们把它当成一个方法的参数传回来,而这个方法就是我们指定的callback参数,即回调函数。实际上我们可以把这个回调函数先放一边,假设我们传回来这样一个字符串"fun('hello world')",那么在页面加载的js就是
<script>
fun("hello world")
</script>
 那么我们要做的就是提前定义好一个方法fun(string){},至于json该怎么用就显而易见了吧。那么大多数情况下API可能不是我们自己写的,我们不能要求那边每次按我们的要求返回什么样的字符串,所以就要用到callback参数,就是提前把我们想让他返回结果后调用的方法传给他,那么他就可以通过request解析到这个方法名,然后拼出结果返回给我们就可以了。

 

       上面我用了一个webAPI来将json字符串解析为js,然后就可以直接返回到ajax请求的success(string)方法里,其实原理是一样的,只是某些操作被jquery自动执行了。如果我们不指定callback参数的值,其实jquery会帮我们自动生成一个,类似于“jquery000000000”,后面的这些数字是用来唯一区别的,至于是时间戳还是什么的我就没有去研究了,通过上面的webAPI自动帮我们解析,传回结果,然后这个方法会替代success方法执行,好处就是不用我们自己去想一个方法名了,看起来就和普通的ajax请求很像了。

分享到:
评论
2 楼 IT小菜菜 2014-11-01  
我重新加了点说明,你先看下?
1 楼 wf_wangfeng 2014-10-31  
$.ajax({
             type: "get",
             async: false,
             url: "http://z.cn",
             dataType: "jsonp",
             jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
             jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
             contentType: "application/x-www-form-urlencoded; charset=utf-8",
             complete: function(xhr, status) {
            alert("complete--"+xhr.getResponseHeader("Date") );
             },
             success: function(json){
             alert("success");
             },
             error: function(){
                 alert('fail');
             }
         });

这个是我的代码,一直进error,是什么原因,求指点。。

相关推荐

    java+sql server项目之科帮网计算机配件报价系统源代码.zip

    sql server+java项目之科帮网计算机配件报价系统源代码

    【java毕业设计】智慧社区老人健康监测门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

    【java毕业设计】智慧社区心理咨询平台(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

    计算机系统基础实验LinkLab实验及解答:深入理解ELF文件与链接过程

    内容概要:本文档详细介绍了LinkLab实验的五个阶段,涵盖了ELF文件的组成、符号表的理解、代码节与重定位位置的修改等内容。每个阶段都有具体的实验要求和步骤,帮助学生理解链接的基本概念和链接过程中涉及的各项技术细节。 适合人群:计算机科学专业的本科生,特别是正在修读《计算机系统基础》课程的学生。 使用场景及目标:① 通过实际操作加深对链接过程和ELF文件的理解;② 掌握使用readelf、objdump和hexedit等工具的技巧;③ 实现特定输出以验证实验结果。 阅读建议:实验过程中的每个阶段都有明确的目标和提示,学生应按照步骤逐步操作,并结合反汇编代码和二进制编辑工具进行实践。在完成每个阶段的实验后,应及时记录实验结果和遇到的问题,以便于总结和反思。

    基于关键词的历时百度搜索指数自动采集资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于关键词的历时百度搜索指数自动采集资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    用C语言写出一个简单的圣诞树,让你的朋友们体验一下程序员的浪漫,点开即令哦!

    第一次发文的小白,解释的不好,各位大佬勿怪哦

    免费下载:Hilma af Klint a Biography (Julia Voss)_tFy2T.zip

    免费下载:Hilma af Klint a Biography (Julia Voss)_tFy2T.zip

    屏幕截图 2024-12-21 172527.png

    屏幕截图 2024-12-21 172527

    2024级涉外护理7班马天爱劳动实践总结1.docx

    2024级涉外护理7班马天爱劳动实践总结1.docx

    IndexOutOfBoundsException(解决方案).md

    IndexOutOfBoundsException(解决方案)

    【java毕业设计】智慧社区垃圾分类门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

    【java毕业设计】智慧社区网端门户(源代码+论文+PPT模板).zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

    【java毕业设计】智慧社区智慧养老照护系统(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

    Delphi 12 控件之DevExpressVCLProductDemos-24.2.3.exe

    DevExpressVCLProductDemos-24.2.3.exe

    计算机语言学中并查集数据结构的C++实现

    欢迎下载

    【java毕业设计】智慧社区养老服务平台.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

    小米15pro工程固件 可以用于修改参数 修复tee损坏 修复底层分区 会用的下载

    资源描述: 机型代码:haotian 1-----工程固件可以用于修改参数 开启diag端口。可以用于修复tee损坏以及修复底层分区。 2-----此固件是完整官方。不是第三方打包。请知悉 3-----此固件可以解锁bl后fast模式刷写。也可以底层深刷。也可以编程器写入 4-----请会用此固件 了解工程固件常识以及会用的朋友下载。 5-----个别高版本深刷需要授权才可以刷入。需要自己会刷写。 6------资源有可复制性。下载后不支持退。请考虑清楚在下载哦 工程资源常识可以参考博文:https://blog.csdn.net/u011283906/article/details/141815378 了解基本

    JSP论文格式化系统_——后台模块的设计与实现(源代码+论文)(2024gk).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    html+css网页设计 美食 蛋糕美食7个页面

    预览地址:https://blog.csdn.net/qq_42431718/article/details/144633992 html+css网页设计 美食 蛋糕美食7个页面

    【java毕业设计】智慧社区居民意见门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

Global site tag (gtag.js) - Google Analytics