使用Jquery应用到Asp.net ajax中时应该避免的3个误区

Ajax中使用json这个轻量级数据类型通信的好处相信大家已经很清楚,考虑到安全问题,Asp.net Ajax的webService使用json,应该防止Json Hijacking。因此通常我们的做法是在使用Post请求式,并将 请求的content-type设置成application/json; charset=utf-8。但客户端如果你使用的是Jquery,有三 个细节问题是我们应该注意的:

1 :如果我们Post时没有任何数据传给服务端,请指定Data:{} 如:

Code

1 $.ajax({
2  type: "POST",
3  url: "PageMethod.aspx/PageMethodName",
4  data: "{}",//注意这里不可省。
5  contentType: "application/json; charset=utf-8",
6  dataType: "json"
7 });

这是因为在IIS中post请求时Content —Length是必须提供的,即使没用任何Post Data.Content-Length也应该设为0,但这样的话Jquery不会自动设置Header,除非请求中包含post Data。 而Asp.net Ajax的json传输,又要求post方式,因此我们不能改变他的请求方式。简便的解决法案就是在 请求中给定一个空的json 对象。以符合IIS的要求,此时Content-Length为2。这时在服务端我可以完全 忽略这个为空的参数,并处理相应的请求。

2:当post data 不为空时。我们应该避免在beforeSend事件里设置RequestHeader。

如一点所述的范例post data 为空时,既然jquery不能自动设置Header,我们能否手工帮他设置呢? 答案时是

肯定的。这时我们是在beforeSend事件中设置的。如代码所示(请注意:必须设置为 application/json否则webservice

时不会返回json。这也是出于安全的考虑)。

Code

1 $.ajax({
2  type: "POST",
3  url: "WebService.asmx/WebMethodName",
4  beforeSend: function(xhr) {
5   xhr.setRequestHeader("Content-type",
6             "application/json; charset=utf-8");
7  },
8  dataType: "json"
9 });

时间: 2024-12-03 07:51:40

使用Jquery应用到Asp.net ajax中时应该避免的3个误区的相关文章

如何在ASP.Net Ajax中调用WebService

ajax|asp.net|web 今天我想实现利用javascript调用WebService我首先就想到了ASP.Net Ajax 因为微软的东西用着方便,我从网上看了看,这东西好多人都写了,我就从官方找了个Demo下了看看源代码,感觉没什么特殊的,于是动手开始写.先添加一个webservice.asmx然后在default.aspx中加入ScriptManager 并设置serviecs属性<asp:ScriptManager runat="server" ID="

Asp.net Ajax 中的脚本错误: Sys未定义 的解决方法

ajax|asp.net|错误|脚本|解决         提前祝大家新年好!前段时间日夜赶工,终于按计划推出了项目的新版本.今天终于有时间写点东西了.         前段时间公司同事在项目中引入了Asp.net Ajax (beta1)版. 用着用着,在查看网页时,不时报 'Sys'未定义 的错误.按照网上的办法对web.confg 做了一翻手术,一点效果也没有.想想也对,web.config跟本没改动过,凭什么突然就把问题都算在人家头上?经过一翻摸索后,突然发现,原来是身份验证惹的祸.在配

在ASP.NET AJAX中别使用mode=Legacy

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

在ASP.NET AJAX中别使用mode=&amp;quot;Legacy&amp;quot;

[导读]假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJAX的话,需要了解如何避免文中提到的这个常见的疑难杂症. 开发人员遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现. 问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本

疑难杂症:在ASP.NET AJAX中别使用

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的JavaScript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

分清ASP.NET AJAX中的Extender和Behavior模型

ASP.NET AJAX提出了多种模型,在客户端有Component.Control和Behavior模型,在服务器端有 ScirptControl和Extender模型.这些模型各有各的用途,但是请注意非常重要的一点:客户端模型和服 务器端模型是相互独立的. ASP.NET AJAX的重要组件之一是Ajax Control Toolkit,其中包括了大量 的Extender和Behavior.其中的Extender使用ASP.NET AJAX提出的Extender模型,在客户端使用了 Micr

探索ASP.NET AJAX中的消息传输模式(一)

在我们使用AJAX的应用中,消息传输有那些方式呢?纯文本.带HTML的文本.XML.JSON?还有??? 在许多情况下,纯文本的消息传输就足够了.例如,要传输一个用户名,用户密码,或是用户联系方法 (PHONE,EMAIL,MSN)等,通常都是以文本的形式传输的.又比如复杂点的数据信息,表格.对象或者是? ??,这样我们可以使用XML或是JSON来格式化数据后进行传输. 有这样一个AJAX的应用场合,提供一系列的标签连接,让用户任意选择,浏览器向服务器发送请求查 询得到想要的数据信息.下面就以这

在ASP.NET AJAX中别使用mode=“Legacy”

最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJAX的话,请读下去,了解如何

Asp.net Ajax中的脚本错误“Sys未定义”的解决方法

提前祝大家新年好!前段时间日夜赶工,终于按计划推出了项目的新版本.今天终于有时间写点东西了. 前段时间公司同事在项目中引入了Asp.net Ajax (beta1)版. 用着用着,在查看网页时,不时报 'Sys'未定义 的错误.按照网上的办法对web.confg 做了一翻手术,一点效果也没有.想想也对,web.config跟本没改动过,凭什么突然就把问题都算在人家头上?经过一翻摸索后,突然发现,原来是身份验证惹的祸.在配置了身份验证的网站中,访问未登录页面时,对Ajax脚本资源的访问被拒绝,转向