重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.jquery.ajax请求aspx
成都创新互联专业为企业提供阜阳网站建设、阜阳做网站、阜阳网站设计、阜阳网站制作等企业网站建设、网页设计与制作、阜阳企业网站模板建站服务,十余年阜阳做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
请求aspx的静态方法要注意一下问题:
(1)aspx的后台方法必须静态,而且添加webmethod特性
(2)在ajax方法中contentType必须是“application/json”,
(3)data传递的数据必须是严格的json数据,如"{'a':'aa','b':'bb'}",而且参数必须和静态方法的参数一 一对应
(4)aspx的后台方法返回的数据默认形式是“{'d':'返回的内容'}”,所以如果dataType指定为"json"必须通过data.d来获取返回数据
在webfrom页面中后台定义请求方法(方法必须静态,而且必须添加WebMethod特性)
[WebMethod]
public static string GetString(string str_a,string str_b)
{
return str_a+str_b;
}
前台页面请求
$(function(){
$.jax({
url:'default.aspx/GetString',
type:'post',
contentType:'application/json',//这里必须指明要传递到服务器的内容的编码方式,而且必须是json,否则后台方法获取不到传递数据。
dataType:'json',//客户端以json的方式去读取返回数据
data:'{'str_a':'aaa','str_b':'bbbb'}',//参数必须和后台的参数名称一样 data必须传递json格式的数据
success:function(result){
alert(result.d);//因为webmethod的方法默认返回的数据格式是json的格式而且数据格式如:"{'d':'返回的数据'}",所以要通过.d来获取返回的内容。
}
});
});
2.请求ashx
注意问题:
(1)ajax方法中的contentType如果指定必须指定为“application/x-www-form-urlencoded”,否则在ashx中request.form获取不到数据
(2)如果dataType为json,想要jQuery自动解析json数据,ashx必须返回严格的json数据,而且必须是双引号(用反义字符去反义)的格式,如: context.Response.Write("{\"d\":\"Hello
World\"}"),否则jquery会解析json失败。
(3)如果因为contentType未设置或者不是“application/x-www-urlencoded”类型,reque.form获取不到数据,可以通过context.Request.InputStream来获取请求内容。
(4)在请求ashx中data参数有这几种形式: data:{'a':'aa','b':'bb'}, data:"a=aab=bb",data:{a:'aa',b:'bb'},这三种数据都可以通过request.form[""]来获取到。
如果你要保证数据的安全性,你可以在ashx中使用session验证。
如:你的index.aspx中使用jquery回调ashx数据,那么在index.aspx page_load时session["checked"]="true",在ashx中验证session是否存在。
但ashx中要获取session内容还需如下几步:
①导入命名空间
using System;
using System.Web;
using System.Web.SessionState; //第一步:导入此命名空间
②实现接口
public class MyWeb : IHttpHandler将此改为如下:
public class MyWeb : IHttpHandler ,IRequiresSessionState //第二步:实现接口 到此就可以像平时一样用Session了
③调用方法
HttpContext.Current.Session["Session变量名称"]
$.ajax({
url:'/你的ashx地址',
....
success:function(data){
//data就是你ashx返回的数据
}
})
首先这是一个错误的认识,
jquery无论怎么样,针对 的都是请求,通俗点讲,jquery所做的事就是提交参数按照一定的方法给某个url。所以,jquery是无法调用ashx的静态方法的,只能丢一个请求到服务器。
调用这个方法,是服务器的脚本解析这个请求,然后再去调用这个方法,返回数据。
jquery ajax dataType有一下几种类型:
类型:String
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
——————-综上所述
我们可以知道,利用ajax异步调用返回的结果只有 sring、xml、json、text、script、html、jsonp
而我们从一般处理程序(handler1.ashx)中返回的则HTTP响应流
而ajax解析成了 string类型解析错误。
,你可以换一种方式,返回图片的路径,通过jquery进行加载图片】
$.ajax({
url: "Handler1.ashx",
type: "post",
data: "",
error: function (request, message, ex) {
alert(message + request + ex);
},
success: function (returnValue) {
$("#m").attr("src", returnValue);
}
});
context.Response.Write(context.Server.MapPath("2.jpg"));