这两天花了很多时间弄研究jsonp这个东西,

可是无论我怎么弄..TMD就是不进入success函数,并且一直进入error函数...让我着实DT啊.

可以看下我之间的提问(这就是我遇到的烦恼)..

http://q.cnblogs.com/q/74391/

经过N次的折腾之后,偶然间..发现这么一个与众不同的帖子,让我解决了jsonp的疑惑.(为什么说他与众不同?因为他不像网上其它那些千篇一律的复制粘贴转载..我甚至怀疑转载的人们有没有测试过到底能不能用,反正我试了是不能的,这样的转载没意义,甚至浪费看贴人的时间,强烈反对.)

好了,帖子的地址如下:

http://my.oschina.net/erichsbc/blog/170780

里边有一句非常简洁却关键的字"关键的地方是返回的字符串,返回的字符串必须包含jsonp的回调函数名称"

我测试后,终于解决了.

好了,现在我把我的总结写出如下:

必须满足2个条件,否则它不进入success:function(){}而是直接进入error函数
 
必须满足2个条件,否则它不进入success:function(){}而是直接进入error函数
 
1,前台必须指定回调函数的名称,
但可以不用声明回调函数,直接在success:function(x){..}里对返回的数据处理
 
如下:
 function Test() {

$.ajax({
                url: "http://api.com/commonAPI/JsonP?sessionID=fff",
                dataType: "jsonp",
                //自定义的jsonp回调函数名称"jsonpCallback",返回的json也必须有这个函数名称
                jsonpCallback: "OnCall",
                success: function (json) {
                    alert("OK");
                    alert(json);
                },
                error: function (xhr, status, error)
                {
                    alert("ER");
                    console.log(xhr);
                }
            });
        }

 
 
2,后台返回的字符串中必须包含前台所指定的回调函数的名称
 
至于返回的内容,除了要用回调函数括起来外,没有任何要求.返回什么数据都可以
 [HttpGet]
        public string JsonP(string sessionID)
        {
            //return "OnCall('as=882ffe,asdfo239')"; 
            return "OnCall(alert('FFF'))";
        }
 
 
如果前台不想指定回调函数的名称,
jquery会自动生成一个
但是必须在后台获取它生成的名称并用它括住返回的值
 
如果这帖子能帮到你,就是我花时间写的价值所在,我希望后来的朋友们可以少走些弯路!

jsonp使用规范的更多相关文章

  1. 关于ajax跨域请求(cross Domain)

    Cross Domain AJAX主要就是A.com网站的页面发出一个XMLHttpRequest,这个Request的url是B.com,这样的请求是被禁止的,浏览器处于安全考虑不允许进行跨域访问, ...

  2. 阿赫亚web安全JSON

    前言 JSON(JavaScript Object Notation),可以说,这一事实,浏览器,server数据交换标准.的格式如XML,或者其他自己定义的格式会越来越少. 为什么JSON这么流行? ...

  3. 通过扩展让ASP.NET Web API支持JSONP

    同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒 ...

  4. [CORS:跨域资源共享] 同源策略与JSONP

    Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分."同源策略"限制了JavaScript的跨站点调用 ...

  5. 通过扩展让ASP.NET Web API支持W3C的CORS规范

    让ASP.NET Web API支持JSONP和W3C的CORS规范是解决"跨域资源共享"的两种途径,在<通过扩展让ASP.NET Web API支持JSONP>中我们 ...

  6. AMD规范与CMD规范的区别

    AMD规范与CMD规范的区别是什么?    在比较之前,我们得先来了解下什么是AMD规范?什么是CMD规范?当然先申明一下,我个人也是总结下而已,也是网上看到的资料,自己总结下或者可以说整理下而已,供 ...

  7. JavaScript跨域调用、JSONP、CORS与ASP.NET Web API[共8篇]

    [第1篇] 同源策略与JSONP 浏览器是访问Internet的工具,也是客户端应用的宿主,它为客户端应用提供一个寄宿和运行的环境.而这里所说的应用,基本是指在浏览器中执行的客户端JavaScript ...

  8. AMD规范与CMD规范的区别是什么?

    AMD规范与CMD规范的区别是什么?    在比较之前,我们得先来了解下什么是AMD规范?什么是CMD规范?当然先申明一下,我个人也是总结下而已,也是网上看到的资料,自己总结下或者可以说整理下而已,供 ...

  9. json和jsonp(json是目的,jsonp是手段)

    自己理解:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的" ...

随机推荐

  1. 配置Ubuntu开发环境

    前言 新买了一台ThinkPad E431,主要看中了硬盘500G和7200转/分钟的速度,因此准备从x220上把工作环境迁移到新买的笔记本上. 为什么不要公司的电脑,是由于160G的ssd硬盘实在是 ...

  2. Docker intercontainer 网络解释

    https://segmentfault.com/a/1190000000669312

  3. JS之正则表达式验证URL

    function IsURL(str_url){ var strRegex = "^((https|http|ftp|rtsp|mms)?://)" + "?(([0-9 ...

  4. MySQL(18):Select- subquery子查询

    1. Select- subquery子查询 子查询:是将一条查询语句嵌套在另一条查询语句之中. 2. 案例 需求:查询获得代课天数最多的那个老师的信息. 思路:先获得最多的代课天数是多少天,然后再判 ...

  5. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle

    随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成.对于这种多系统.多项目的情况,很多构建工具都已经提供了不错的支持,像maven.ant.Gradle除了借鉴了ant或者 ...

  6. Android_ViewPager

    view1源代码及xml资源文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  7. multi-threads synchronization use conditional mutex

    #include <pthread.h> int thread_flag; pthread_cond_t thread_flag_cv; pthread_mutex_t thread_fl ...

  8. web项目设计与开发——DBHelper3

    本次学习的内容为根据DBHelper对数据库里的数据进行增删改查 具体内容为: 一.编写程序 1.创建工程——Mangage    2.在src目录下创建五个包,分别为DAO,DBHelper,Ent ...

  9. MySql安装步骤详解,MySql的root密码设置,启动MySql服务。

    1.下载mysql安装包,并解压,双击mysql-5.6.24-winx64.msi 2.点击下一步 3.选择custom 4.选择安装内容和位置,5个安装内容要选择will be installed ...

  10. LVS配置与安装

    IP和主机准备: 准备VIP :20.20.20.1 lvs主机 :172.24.22.70 HA主机:172.24.22.4 包准备:ipvsadm-1.24.tar.gz 1.安装前配置包  2. ...