跨域 - 自定义 jsonp实现跨域
问题:在现代浏览器中默认是不允许跨域。





数据源页面的源码
protectedvoid Page_Load(object sender, EventArgs e)
{
// 摘要:获取或设置输出流的 HTTP 字符集。
// 返回结果: System.Text.Encoding 对象,包含与当前响应的字符集有关的信息。
Response.ContentEncoding = Encoding.UTF8;
// 摘要: 获取或设置输出流的 HTTP MIME 类型。 //
// 返回结果: 输出流的 HTTP MIME 类型。默认值为“text/html”。
Response.ContentType = "application/javascript";
String jsonContent = "{'InnerDevId':12,'InnerOrgId':13}";
//将字符串写入响应输出流
/*
* 这里定义的方法必须加上window.onload。因为如果不加,这段代码将会在页面没有加载的时候就执行了。
*/
Response.Write("window.onload = function () { dosomething(" + jsonContent + ")}");
}
使用页面的源码
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="testgetjson._Default"%>
<!DOCTYPEhtml>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>测试页面</title>
<scripttype="text/javascript"src="Scripts/jquery-1.7.1.js"></script>
<scripttype="text/javascript">
function dosomething(jsondata) {
var odiv = document.getElementById('div1');
var strJson = JSON.stringify(jsondata);
//$("#div1").text(strJson);
odiv.innerHTML=strJson;
returnfalse;
}
</script>
<scripttype="text/javascript"src="http://localhost:1326/Default.aspx"></script>
</head>
<body>
<formid="form1"runat="server">
<p>这里展现出来的,是跨域的问题,是从别的网页加载数据,还是从服务器加载数据</p>
<divid="div1"></div>
<pid="pmsg"></p>
</form>
</body>
</html>
利用jQuery实现跨域
利用jQuery实现跨域实际很简单。只要把服务区还回的json数据,加上加上回调函数名,就可以实现。
服务端修改后,和jQuery结合实现跨域----修改后的实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace testjsopGbk
{
publicpartialclass_Default : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
// 摘要:获取或设置输出流的 HTTP 字符集。
// 返回结果: System.Text.Encoding 对象,包含与当前响应的字符集有关的信息。
// 异常: System.ArgumentNullException:试图将 System.Web.HttpResponse.ContentEncoding 设置为 null。
Response.ContentEncoding = Encoding.UTF8;
// 摘要:获取或设置输出流的 HTTP MIME 类型。
// 返回结果:输出流的 HTTP MIME 类型。默认值为“text/html”。
Response.ContentType = "application/javascript";
String jsonContent = "{'InnerDevId':12,'InnerOrgId':13}";
// 摘要: 获取 HTTP 查询字符串变量集合。
// 返回结果:System.Collections.Specialized.NameValueCollection,包含由客户端发送的查询字符串变量的集合。例如,如果请求: URL 为 http://www.contoso.com/default.aspx?id=44,则 System.Web.HttpRequest.QueryString的值为“id=44”。
string dosomething = Request.QueryString["Callback"] == null ? "jsoncallback" : Request.QueryString["Callback"].ToString();
//将字符串写入响应输出流
/*
* 这里将从url动态获取的方法名写到还回数据的前面。
*/
Response.Write(dosomething + "(" + jsonContent + ")");
}
}
}
}
在JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式。分别是JQuery的jquery.ajaxjsonp格式和jquery.getScript方式。
ajax要在各种浏览器下都实现完美的跨域需要借助于jsonp技术,jsonp实质是请求一个js脚本文件,在js文件载入完毕时执行某个函数,这样就可以完美的规则跨域问题了。
什么是jsonp格式呢?API原文:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。
跨域 - 自定义 jsonp实现跨域的更多相关文章
- JS跨域:jsonp、跨域资源共享、iframe+window.name
JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...
- JSONP实现跨域
首先提出:什么是跨域?如何解决跨域? 跨域可以简单的理解为从一个域名访问另一个域名,由于javascript的同源政策的限制,出于安全的考虑,不允许浏览器这么做.比如a.com 域名下的js无法操作b ...
- 转(JSONP处理跨域事件)
前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...
- 跨域利器JSONP(转)
何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...
- jsonp实现跨域访问
要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...
- 解决跨域问题-jsonp&cors
跨域的原因 浏览器的同源策略 同源策略是浏览器上为安全性考虑实施的非常重要的安全策略. 指的是从一个域上加载的脚本不允许访问另外一个域的文档属性. 举个例子:比如一个恶意网站的页面通过iframe嵌入 ...
- JSONP解决跨域问题,什么是JSONP(转)
原文链接:https://www.cnblogs.com/xinxingyu/p/6075881.html 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的 ...
- jsonp解决跨域问题
日常开发网页中,时常遇到跨域问题,通常解决办法:后端提供的接口支持jsonp格式,前端采用dataType:jsonp. 一:Jquery封装的AJAX,dataType:jsonp格式的方法: $. ...
- 跨域及JSONP原理
什么是跨域:a.com 域名下的js无法操作b.com或是c.a.com域名下的对象 为什么浏览器要引入跨域问题? 跨域问题来源于浏览器的同源策略,为啥要有这个策略呢? 为了安全.假设现在有a.com ...
随机推荐
- phpStrom映射代码
- dotnet core使用开源组件FastHttpApi进行web应用开发
FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi).在这 ...
- Linux~常用的命令
大叔学Linux就一个目的,部署在它上面的服务,如redis,mongodb,fastDFS,cat,docker,mysql,nginx等 下面找一下的命令,来学学这个神秘的操作系统 常用指令 ls ...
- Chapter 5 Blood Type——12
I blinked, my mind going blank. Holy crow, how did he do that? 我眨着眼睛,心里一片空白.天哪,他是怎么做到的? "Er, wh ...
- ldap配置系列一:ldap的安装
ldap的安装 ldap的简介 LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简 ...
- Ansible快速上手
ansible 是通过python 语言开发的自动化运维工具,可以实现批量系统设置.批量程序部署.批量执行命令等功能 下面是基于docker使用ansible测试示例,可以让新手快速上手使用 一.新建 ...
- SpringBoot整合系列-整合Swagger2
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9959844.html SpringBoot整合Swagger2 步骤 第一步:添加必要的 ...
- 四种途径提高RabbitMQ传输数据的可靠性(二)
前言 上一篇四种途径提高RabbitMQ传输消息数据的可靠性(一)已经介绍了两种方式提高数据可靠性传输的方法,本篇针对上一篇中提出的问题(1)与问题(2)提出解决常用的方法. 本文其实也就是结合以上四 ...
- [总结] NOIP 前的考试记录
sb博主又犯sb错误了! 他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了! 于是他想记录一下自己犯的sb错误看看自己到底有多sb! 嗯就从今天开始吧 2018.9.28 1. 二分边界写错.骚什么 ...
- https 加密、http2.0、keep-alive
原文地址:https://ainyi.com/44 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议 ...