关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例
部署环境:Window 7 SP1+IIS7
成功方案:
其成功解决问题的几个重要因素如下:
1. 由于WebService默认不支持Get请求,所以要在Web.config配置文件内的<system.web>节点内添加如下元素:
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
注意:放在web service网站的web.config里面,而不是放在客户端程序的web.config里。
2. 在请求的URL加参数jsoncallback=?,注意这里jsoncallback=?是关键所在!其中?符号会被JQuery自动替换成其它的回调方法名称,具体过程和原理我们这里不予理会。我们关心的是jsoncallback=?起什么作用了?原来jsoncallback=?被替换后,会把方法名称传给服务器。我们在服务器端要做什么工作呢?服务器要接受参数jsoncallback,然后把jsoncallback的值作为JSON数据方法名称返回。
3. 设置dataType类型为”jsonp”
WebService代码如下:
using System.Web;
using System.Web.Services;
/// <summary>
///UserService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class UserService : System.Web.Services.WebService
{
[WebMethod]
public void GetLoginId(string loginId)
{
string callback = HttpContext.Current.Request["jsoncallback"];
bool bl= true;//这是我调用业务逻辑层(BLL)的一个方法
//返回一个布尔(boolean)值
//现在我省略掉,直接赋值true
HttpContext.Current.Response.Write(callback +
"({result:'" + bl + "'})");
//关于result这词是你自己自定义的属性
//会作为回调参数的属性供你调用结果
HttpContext.Current.Response.End();
}
}
aspx页面及javascript脚本代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>测试</title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.js"></script>
<script type="text/javascript">
//Document加载完毕后初始化方法
$(function Init() {
$("#TxtLoginId").bind("blur", CkLoginId);
});
//帐号验证及提示
function CkLoginId() {
var Id = $("#TxtLoginId");
$.ajax({
url: "http://localhost:5311/UserService.asmx/GetLoginId?jsoncallback=?",
dataType:"jsonp",
data:{"loginId":Id.val()},
success:OnSuccess,
error:OnError
});
}
function OnSuccess(json) {
alert(json.result);
}
function OnError(XMLHttpRequest, textStatus, errorThrown) {
targetDiv = $("#data");
if (errorThrown || textStatus == "error" || textStatus == "parsererror" || textStatus == "notmodified") {
targetDiv.replaceWith("请求数据时发生错误!");
return;
}
if (textStatus == "timeout") {
targetDiv.replaceWith("请求数据超时!");
return;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>
<asp:Label ID="LblLoginId" runat="server" Text="帐 号" ClientIDMode="Static"></asp:Label>
<asp:TextBox ID="TxtLoginId" runat="server" ClientIDMode="Static"></asp:TextBox>
</td>
</tr>
</table>
</form>
</body>
</html>
运行结果:

原文链接:http://www.cnblogs.com/VAllen/archive/2012/07/12/JQueryAjaxRegion.html
关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例的更多相关文章
- 4 伪ajax:jsonp、cors 跨域请求
一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一种约定,它是浏览器最 ...
- jsonp实现js跨域请求
sonp是跨域通信的一个协议 具体来说jsonp实现跨域请求其实是使用js文件引用(js文件不一定是.js结尾)可跨域的性质,将请求的结果包裹在客户端需要调用的js方法内部.需要前后端配合使用. 前段 ...
- JSONP方法解决跨域请求
Ajax跨域请求的问题 跨域:跨域名, 一个域名下的文件去请求了和他不一样的域名下的资源文件(注意是请求文件,而不是数据接口),那么就会产生跨域请求,下面来写一个ajax来跨域请求的例子 <!D ...
- 【转】solr+ajax智能拼音详解---solr跨域请求
本文转自:http://blog.csdn.net/wangzhaodong001/article/details/8529090 最近刚做完solr的ajax智能拼音.总结一下. 前端:jQuery ...
- Ajax跨域请求ashx文件与Webservice文件
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1 ...
- 使用jsonp来实现跨域请求
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Vue2.0 vue-source.js jsonp demo vue跨域请求
以调用百度的输入提示接口为例 ===================================================================================== ...
- jQuery jsonp跨域请求
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
- jQuery jsonp跨域请求详解
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
随机推荐
- Linux下platform设备以及platform设备和驱动注册的先后顺序
platform是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器.挂接在SOC内存空间的外设等都属Platform设备.如ARM S3C6410处理器中,把内部集成的I ...
- HW3.7
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- HW2.22
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- HW1.7
public class Solution { public static void main(String[] args) { System.out.println("π = " ...
- cep
- DevExpress控件XtraGrid的Master-Detail中DetailViewCaption显示问题
今天遇到XtraGrid身档抬头显示不对问题,查找了很多资料后未找到解决办法,后浏览至此文作者发现解决问题的方法就是:DataSet中的RelactionName跟DetailGridview的Lea ...
- The Dangers of JavaScript’s Automatic Semicolon Insertion
Although JavaScript is very powerful, the language’s fundamentals do not have a very steep learning ...
- svn无法更新解决方案
1.删除C:\Documents and Settings\用户名\Application Data\Subversion\auth下的文件,删除svn登录信息. 2.将eclipse中 window ...
- 怎么从代码中拿到栈回溯信息(call stack trace)
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:怎么从代码中拿到栈回溯信息(call stack trace).
- scrollTop 值为 0
由scrollTop兼容问题引起: 在 Firefox 和 IE 中,使用 document.documentElement.scrollTop 获取: 在 Chrome 中,使用 document. ...