这两天花了很多时间弄研究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. android小笔记

    1.启动其他应用程序 Intent launchIntent = getPackageManager().getLaunchIntentForPackage(currentAppInfo.getPac ...

  2. IOS开发之——颜色设置

    颜色设置: 指定RGB,參数是:红.绿.黄.透明度,范围是0-1 + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(C ...

  3. LINUX SHELL条件判断

    算术运算的条件判断 [] [[]]: -eq -ne -lt -le -gt -ge (( )):><>=<== [root@monitor ~]# if (( 2 == 3) ...

  4. node.js 浏览器中输出 “hello world”

    前段时间花了几个小时,在command面板输出了“hello world”,今天就来说说怎么在浏览器上输入一个地址,然后页面输出“hello world”. 首先要搭建一个基础的 HTTP 服务器 一 ...

  5. 隐式Intent实例

    注意:The <strong>categories</strong>, if supplied, must <em>all</em> be listed ...

  6. Mysql导出表结构及表数据 mysqldump用法

    几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名     mysqldump -u wcnc -p smgp_apps_wcnc >  ...

  7. 在android的spinner中,实现取VALUE值和TEXT值

    为了实现在android的spinner实现取VALUE值和TEXT值,我尝试过好些办法,在网上查的资料,都是说修改适配器,刚开始我也是通过修改适配器的方法来做的,但是如果一个activity有多个s ...

  8. 获取mp4文件信息

    计算电影长度 方法1 从mvhd - movie header atom中找到time scale和duration,duration除以time scale即是整部电影的长度. time scale ...

  9. jquery通过ajax方法获取json数据不执行success回调

    问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...

  10. 虚反矩阵指令pinv之应用

    pinv指令     在多数解的例子中,有时并不是仅要将其中一变数设定为零之解.为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解.pinv(A)又称为虚反矩阵(pseudoinvers ...