利用JSONP--解决ajax跨域问题
来源:互联网 发布:单晶叶片 知乎 编辑:程序博客网 时间:2024/05/17 08:39
浏览器有一个很重要安全性限制,即为同源策略:不同域的客户端脚本在无明确授权的情况下不能读些对方资源。
这就是引起为何取不到数据的原因了,那如何才能解决跨域的问题呢?这就要用到JSONP。
先了解下什么是JSONP了。JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。--来源百度
JSONP就像是JSON+Padding一样(Padding这里我们理解为填充), 下图比较明白的他们的工作方式。
明白了工作原理,服务器端的脚本就好写了:
这个代码可以返回json和 jsonp请求,判断有callback时,返回callback+( + json数据+ ),否则只返回json数据
html页,
1.跨域请求
2.本地请求
这就是引起为何取不到数据的原因了,那如何才能解决跨域的问题呢?这就要用到JSONP。
先了解下什么是JSONP了。JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。--来源百度
JSONP就像是JSON+Padding一样(Padding这里我们理解为填充), 下图比较明白的他们的工作方式。
明白了工作原理,服务器端的脚本就好写了:
using System;using System.Web;using System.Data;using System.Text;using JSON_helper;public class getJOSN : IHttpHandler { public void ProcessRequest (HttpContext context) { string callback = context.Request.QueryString["callback"]; string tablename = context.Request.QueryString["tablename"]; if (tablename == "" || tablename == null) tablename = "tablename"; DataTable dt = new DataTable(); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("year", typeof(string)); dt.Columns.Add("avg", typeof(string)); DataRow tr = dt.NewRow(); tr["name"] = "张三"; tr["year"] = "2005-02-02"; tr["avg"] = "男"; dt.Rows.Add(tr); //ds.Tables.Add(dt); DataRow tr2 = dt.NewRow(); tr2["name"] = "李四"; tr2["year"] = "2007-02-02"; tr2["avg"] = "女"; dt.Rows.Add(tr2); context.Response.Clear(); context.Response.ContentEncoding = Encoding.UTF8; context.Response.ContentType = "application/json"; string json_string = JSON_helper.JsonConverter.ToJsonCount(dt, tablename); if (callback == "" || callback == null) context.Response.Write(json_string);//格式: callback(json); else context.Response.Write(callback + "(" + json_string + ")");//格式: callback(json); context.Response.Flush(); context.Response.End(); } public bool IsReusable { get { return false; } }}
这个代码可以返回json和 jsonp请求,判断有callback时,返回callback+( + json数据+ ),否则只返回json数据
html页,
1.跨域请求
<script type="text/javascript"> $(function () { $.getJSON("http://awingnet.com/myup/net_json/getJOSN.ashx?tablename=tiems&callback=?", function (data) { $.each(data.tiems, function (i, item) { var content = item.name + "," + item.year + "</br>"; $("#content").append(content); alert(item.name); }) }); });</script>
2.本地请求
<script type="text/javascript"> $(function () { $.getJSON("getJOSN.ashx?tablename=tiems", function (data) { $.each(data.tiems, function (i, item) { var content = item.name + "," + item.year + "</br>"; $("#content").append(content); alert(item.name); }) }); });</script>原码下载
0 0
- 利用JSONP--解决ajax跨域问题
- 利用JSONP解决AJAX跨域问题的原理
- jQuery中利用JSONP解决AJAX跨域问题
- 深入浅出JSONP:解决AJAX跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- 深入浅出JSONP--解决ajax跨域问题
- JSONP--解决ajax跨域问题
- 20170214C语言提升07_预编译指令
- hdu 七夕节
- Android中实现定时器的四种方式
- Git的常用操作命令
- 使用redis进行基于shiro的session集群共享
- 利用JSONP--解决ajax跨域问题
- Quarz入门讲解(不错的例子)
- TortoiseSVN客户端重新设置用户名和密码
- springmvc框架原理
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 蓝桥杯 基础练习 十六进制转十进制
- 用 opengl 写一个小游戏 (2)
- JAVA生成Word文档(经过测试)
- MVC、MVP、MVVM