这两天花了很多时间弄研究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. MST最小生成树及克鲁斯卡尔(Kruskal)算法

    最小生成树MST,英文名如何拼写已忘,应该是min spaning tree吧.假设一个无向连通图有n个节点,那么它的生成树就是包括这n个节点的无环连通图,无环即形成树.最小生成树是对边上权重的考虑, ...

  2. [React Native] Build a Separator UI component

    In this lesson we'll create a reusable React Native separator component which manages it's own style ...

  3. [MODx] 10. Using Babel for Muti-languages support

    1. Go to 'Extras' -> download and install 'Babel'. 2. Set up '.htaccess' file, currently, we set ...

  4. C#_delegate和事件 - 如果金额小于0则触发事件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. C#_StringBuilder分离字符串实例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Stri ...

  6. unicode 编码总结

    unicode简介: unicode又称为unicode character set,缩写为ucs,意为字符集.编码方式有utf-7,utf-8,utf-16,utf-32几种,常用的是utf-8和u ...

  7. Servlet, Listener 、 Filter.

    Java Web的三大组件:Servlet, Listener . Filter. 使用Listener监听器:八大监听器: 第一组:用于监听Servlet三个域对象的创建与销毁 1. Servlet ...

  8. 《Mysql 公司职员学习篇》 第一章 小A的烦恼

    第一章  小A的烦恼 ----- 为什么学习数据库 和 如何选择数据库 小A是某公司的职员,公司数据部的员工,平常的大小工作,完全离不开EXCELL,而最近小A却越来越苦恼,不由的向好朋友小Y吐槽.小 ...

  9. CentOS7安装RabbitMQ集群

    实验环境 RabbitMQ 集群 server1.example.com    IP: 10.10.10.11    Node: diskserver2.example.com    IP: 10.1 ...

  10. 计算openlayers两点之间的距离

    distanceTo: function(point) { var distance = 0.0; if ((this.x != null) && (this.y != null) & ...