ajax跨域请求Jsonp实现,使用jsonp实现ajax跨域请求

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料。

由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的 元素是一个例外。利用 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

JSONP的优点是:

它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都 可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。

JSONP的缺点则是:

它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

JSONP是一种脚本注入(Script Injection)行为,有一定的安全隐患。

下面说说如何实现:

一、首先需要在你的webservice的web.config中system.web节点里加入以下节点:

二、webservice代码,为了同时支持一般的请求与jsonp ajax请求,代码如下:

using System.Web.Services;

using System.Collections.Generic;

using System.Data;

using System.Web;

///

///WebService 的摘要说明

///

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

[System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService

{

///

/// 在ajax请求返回后,会自动将这些类型转换为json对象

///

public WebService()

{

}

[WebMethod(Description = "测试")]

public string getInfos(string infostring)

{

string result = infostring;//所要返回的json数据

string jsonCallBackFunName = HttpContext.Current.Request.Params["jsoncallback"] + "";

if (string.IsNullOrEmpty(jsonCallBackFunName))

{

HttpContext.Current.Response.ContentType = "application/json;charset=utf-8";

HttpContext.Current.Response.Write(jsonCallBackFunName + "(" + infostring + ")");

HttpContext.Current.Response.End();

}

return result;

}

}

三、页面及js代码:

Index

$(function () {

$("#tj").click(function () {

var dataStr = "info=ABCTest";

$.ajax({

type: "get",

url: http://xxx/jQueryMobile.asmx/getInfos?jsoncallback,

dataType: "jsonp",

jsonp: 'jsoncallback',

data: dataStr,

success: function (result) {

alert(result.xxx);

}

});

});

});

如果遇到类似:Error... parsererror jQuery15001997238997904205_1298484897373 was not called

说明是解析出问题了,我一开始也碰到了,这个很有可能是你服务端返回的json格式有问题,或者拼接出问题了。

利用jsonp进行Ajax跨域请求

在进行Ajax请求的时候经常会遇到跨域的问题,这个时候一般就会用到jsonp. 关于json和jsonp,网上有很多原理解释,这里就不多赘述,需要的自行搜索. 下面是一个简单的ajax跨域请求示例: ...

JSONP实现Ajax跨域请求

前言 由于浏览器存在同源策略的机制,所谓同源策略就是阻止从一个源(域名,包括同一个根域名下的不同二级域名)加载的文档或者脚本获取/或者设置另一个源加载的文档属性. 但比较特别的是:由于同源策略是浏览器 ...

关于试用jquery的jsonp实现ajax跨域请求数据的问题

我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...

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

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

关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例

部署环境:Window 7 SP1+IIS7 成功方案: 其成功解决问题的几个重要因素如下: 1.       由于WebService默认不支持Get请求,所以要在Web.config配置文件内的& ...

第113天:Ajax跨域请求解决方法

一.原生JS实现ajax 第一步获得XMLHttpRequest对象 第二步:设置状态监听函数 第三步:open一个连接,true是异步请求 第四部:send一个请求,可以发送一个对象和字符串,不需要 ...

如何解决ajax跨域请求?

1.什么是跨域? a.域名不同 b.域名相同,端口不同 注:只有域名相同,端口相同时,才可以访问数据 可以使用jsonp解决ajax跨域请求的问题. 2.什么是jsonp? Jsonp其实就是一个跨域 ...

jsonp其实很简单【ajax跨域请求】

js便签笔记(13)——jsonp其实很简单[ajax跨域请求] 前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资 ...

JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)

1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...

随机推荐

eclipse添加js,html,jsp编辑输入补充提示

1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:zj ...

无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

新建一个MVC4的项目,引用DAL后,将DAL的连接字符串考入:    

你可能感兴趣的:(ajax跨域请求Jsonp实现)