原理:首先客户机会注册一个callback,在发送跨域请求之前,会在url后附带注册的callback参数(如:callback1982342322),随后服务器拿到了callback参数,获取数据后再拼接json数据(如:callback1982342322({status:"ok",fantasy [{ key:value }] }) ),此处应该注意服务器拿到的callback要和客户机上的callback一致,否则跨域不成功,用chrom浏览器可发现 callbackxxx is not defined

1. 客户端跨域请求json数据方式

  - $.ajax( type , async , url , dataType , jsonp ,success : function(json){expression...} , error : function(){expression...})

  这里说明一点,就是jquery是不支持post方式的跨域请求

  - $.getJSON( url , param , function(json){ expression ... })

2. 服务器端设置

  参数: callback / param...

  响应: callback({

      status:"ok",

      fantasy[{

        key1:value1,

        key2:value2

        }]

      });

3. 错误

  收集了测试和实战过程中出现的一些错误

    1.Origin null is not allowed by Access-Control-Allow-Origin 不支持本地Ajax请求

   2.jquery12334223232 is not defined  没有注册callback参数,利用谷歌浏览器的开发者工具查看跨域请求里是否含有callback参数和值,然后检查服务器是否接收                       callback参数并拼接成json格式的数据响应给客户机

   3.XMLHttpRequest cannot load http://i.nubb.com/fcms/conn/shareToFantasy.htm?fid=11&callback=jsoncallback102131211. Origin http://fantasy.nubb.com is not allowed by Access-Control-Allow-Origin.

  解决方法:选定google浏览器快捷方式右键 -> 属性 -> 目标(T) -> 加上 --disable-web-security (如:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security)

4. 实例:

  

<script type="text/javascript">
jQuery(document).ready(function(){
$.ajax({
type: "get",
async: false,
url: "http://i.nubb.com/fcms/conn/shareToFantasy.htm?fid=<%=team.getFans_id()%>&format=jsonp",
dataType: "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
success: function(json){
//dom生成数据
for(var num in json.fantasy){
var html = "<div class=\"tao\"><div class=\"tao1\"><span class=\"t\">"
+"<p><span>$qc-read</span><a href=\"#\"><img src=\"/images/sd_career/liu.gif\" /> </a></p>"
+"</span><div class=\"wenzi\">"
+"<h3>$qc-title</h3>"
+"<div class=\"d\">"
+"<p><a href=\"http://i.nubb.com/fans/Topicdetail.htm?fid=$qc-fid&aid=$qc-aid\" target=\"_blank\">$qc-desc</a>"
+"<dl>"
+"<dt><a href=\"javascript:;\" target=\"_blank\"><img src=\"http://i.nubb.com$qc-ulogo\" /></a></dt>"
+"<dd><a href=\"http://i.nubb.com/home/$qc-uid.htm\" target=\"_blank\">$qc-uname</a> <span id=\"qc-time\">发布于 $qc-time</span></dd>"
+"</dl>"
+"</p></div></div></div></div>";
console.log(json.fantasy[num]);
html = html.replace("$qc-aid", json.fantasy[num].aid);
html = html.replace("$qc-fid", <%=team.getFans_id()%>);
html =html.replace("$qc-read", json.fantasy[num].read);
html =html.replace("$qc-title", json.fantasy[num].title);
html =html.replace("$qc-desc", json.fantasy[num].desc);
html =html.replace("$qc-uid", json.fantasy[num].uid);
html =html.replace("$qc-uname", json.fantasy[num].uname);
html =html.replace("$qc-ulogo", json.fantasy[num].ulogo);
html =html.replace("$qc-time", json.fantasy[num].time.substring(0,10));
$(".taolun").append(html);
}
},
error: function(){
console.log('非法请求');
}
});
});
</script>

                      

JSON跨域请求的更多相关文章

  1. Json跨域请求数-Jquery Ajax请求

    同步请求,async(是否异步) //同步请求,等待并接收返回的结果 var result = $.ajax({ type: "GET", url: address, async: ...

  2. AJAX 跨域请求 - JSONP获取JSON数据

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...

  3. JSON和JSONP有哪些区别,PhoneGap跨域请求如何实现

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

  4. AJAX 跨域请求的解决办法:使用 JSONP获取JSON数据

    由于受到浏览器的限制,ajax不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器 ...

  5. Jquery DataTable AJAX跨域请求的解决方法及SSM框架下服务器端返回JSON格式数据的解决方法

    如题,用HBuilder开发APP,涉及到用AJAX跨域请求后台数据,刚接触,费了不少时间.幸得高手指点,得以解决. APP需要用TABLE来显示数据,因此采用了JQ 的DataTable.  在实现 ...

  6. 【转】AJAX 跨域请求 - JSONP获取JSON数据

    来源:http://justcoding.iteye.com/blog/1366102/ Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流 ...

  7. AJAX跨域请求json数据的实现方法

    这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...

  8. 利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据

    1:跨域请求handler一般处理程序 using System; using System.Collections.Generic; using System.Web; using System.W ...

  9. Jquery 跨域请求JSON数据问题

    制作网站时,我们有时候为了方便快捷会调用别人写好的API接口,或者是调用一些免费的API接口获得JSON数据.比如天气,农历,网站备案信息查询等. 但是,这些API接口都是别人自己服务器上的,我们要调 ...

随机推荐

  1. memcached(二)事件模型源码分析

    memcachedd事件模型 在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型.memcachedd的时间模型同nginx的类似,拥有一个主进行(master) ...

  2. [自娱自乐] 3、超声波测距模块DIY笔记(三)

    前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...

  3. JavaScript中的property和attribute

    property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...

  4. 微软发布Windows 10:连Windows 7都能免费升级了

    今日凌晨,微软宣布Windows 10发布. Windows10 整体重置了 Window8 的设计,恢复了原有的开始菜单设置,系统新增了虚拟桌面功能,搜索框加分类项的形式替代原有的两栏式控制面板界面 ...

  5. spring定时任务轮询(spring Task)

    定时任务轮询比如任务自服务器启动就开始运行,并且每隔5秒执行一次. 以下用spring注解配置定时任务.1.添加相应的schema xmlns:task=" xsi:schemaLocati ...

  6. js随机点名

    定时器案例. <!-- Author: XiaoWen Create a file: 2016-12-08 12:27:32 Last modified: 2016-12-08 12:51:59 ...

  7. iOS开发---iPhone SDK 包含哪些东西?

    第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就 ...

  8. 安装Vmware workstation虚拟机(含软件和注册码)

    1:虚拟机的安装步骤,包含软件包和注册码.本博客所使用的虚拟机版本是vmware-workstation_11.1.0版本,注意不是最新版本, 软件包:http://pan.baidu.com/s/1 ...

  9. 微信小程序笔记(二)

    微信小程序环境搭建与开发工具介绍 2-1 开篇介绍及下载工具 1.开发工具下载地址:   http://t.cn/RVKH0HS 2.下载安装对应版本:win32,win64,mac; 2-2 小程序 ...

  10. Leetcode 263 Ugly Number 数论 类似质因数分解

    Ugly Number的质因数仅为2,3,5 将输入的数分别除以2,3,5直到不能除,看是否为1,为1的是Ugly Number,其他则不是. class Solution { public: boo ...