注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一车,一房,一个温暖家

10万左右的车,80平方的房子,这是我奋斗的暖暖的家

 
 
 

日志

 
 

引用 Jquery Ajax提交到ashx的中文   

2015-06-22 10:12:47|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.首先看一下超链接中文提交
<a href="http://blog.163.com/m13864039250_1/blog/Chinese.ashx?chinese=中文">中文</a>
当点击超链接时:
IE浏览器
发送请求:    GET /View/Exer/Chinese.ashx?chinese=中文 HTTP/1.1
相应正文:中文
Goole浏览器
发送请求:
http://localhost:12621/View/Exer/Chinese.ashx?chinese=%E4%B8%AD%E6%96%87
相应正文:中文

2.$.get方式Ajax提交

$.get("Chinese.ashx", {chinese:'中文'}, function (data) {
$("#result").val(data);
});

IE浏览器
发送请求:GET /View/Exer/Chinese.ashx?chinese=%E4%B8%AD%E6%96%87 HTTP/1.1
相应正文:中文
Goole浏览器
发送请求:
http://localhost:12621/View/Exer/Chinese.ashx?chinese=%E4%B8%AD%E6%96%87
相应正文:中文

3.$.post方式提交

$.post("Chinese.ashx", {chinese:'中文'}, function (data) {
$("#result").text(data);
});

IE浏览器
发送请求正文:chinese=%E4%B8%AD%E6%96%87
相应正文:中文
Goole浏览器与IE相同


4.$.ajax中(没指定返回类型默认为text/plain)
get方式提交:

$.ajax({
url: "Chinese.ashx",
type: 'get',
data: { chinese: '中文' },//-------注明对于此种get方式请求不能用引号引起来
success: function (data) {
$("#result").text(data);
},
error: function (url) {
alert(url);
}
});

IE浏览器和Google浏览器的发送和相应同$.get方式

post方式提交:

$.ajax({
url: "Chinese.ashx",
type: 'post',
data: { chinese: '中文' },//-------注明对于此种post方式请求不能用引号引起来
success: function (data) {
$("#result").text(data);
},
error: function (url) {
alert(url);
}
});

IE浏览器和Google浏览器的发送和相应同$.post方式

以上前台对应的后台ashx文件:

    public class Chinese :RequestHelper, IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string chinese = GetString("Chinese");
            if (chinese == "中文")
                ResponseText(chinese);
        }
   }





5.$.ajax中(指定返回类型为json类型)

5.1  对应后台文件ashx文件:
            string chinese = GetString("Chinese");//--------注意默认情况下,根据键值获取数据时不区分大小写
            if (chinese == "中文")
                ResponseText("{'language':'" + chinese + "'}");//----注意,使用这种情况返回的json数据,前台jquery自动解析出错

get方式提交:

            $.ajax({
                url: "Chinese.ashx",
                type: 'get',
                data: { chinese: '中文' },//---------此种情况下提交,不能使用引号将json对象引起来。

                dataType: 'json',
                contentType: 'application/json;charset=utf-8',
                success: function (data) {
                    $("#result").text(data.language);
                },
                error: function (request, status) {
                    alert(status);
                }
            });


浏览器报错:json数据格式转换在前台失败!即Erro事件触发。
请求Url:   GET /View/Exer/Chinese.ashx?chinese=%E4%B8%AD%E6%96%87 HTTP/1.1
相应正文:{'language':'中文'}
请求过程中IE浏览器和Google浏览器相同。

post方式提交:

   $.ajax({
                url: "Chinese.ashx",
                type: 'post',
                data: { chinese: '中文' },

                dataType: 'json',
                contentType: 'application/json;charset=utf-8',//-----通过post方式在请求ashx文件的时候

此属性不能被显示指定,无论提交的数据是json字符串,还是json对象。
                success: function (data) {
                    $("#result").text(data);
                },
                error: function (request, status) {
                    alert(status);
                }
            });

浏览器没有报错,Error事件没有触发,返回data结果为null。原因:后台文件获取“Chinese”为空没有返回任何数据,没有获取到“Chinese”键值对应的数据是因为指定了contentType属性。

post方式提交2:

$.ajax({
url: "Chinese.ashx",
type: 'post',
data: { chinese: '中文' },//-----此处提交的是json对象,不能使json字符串。

dataType: 'json',
success: function (data) {
$("#result").text(data.language);
},
error: function (request, status) {
alert(status);
}
});

浏览器报错:json数据格式转换在前台失败!即Erro事件触发。
请求正文:chinese=%E4%B8%AD%E6%96%87
相应正文:{'language':'中文'}
请求过程IE浏览器和Google浏览器处理相同。

5.2对应后台ashx
            string chinese = GetString("chinese");
            if (chinese == "中文")
                 ResponseText("{\"language\":\"" + chinese + "\"}");//-----这种方式前台jquery可以自动解析成功,不会触发Error事件。




6.总结
1.当jquery Ajax使用get或post 方式请求ashx的时候,提交的是Json对象而不是json字符串。这与WebService不同。
2.当Jquery Ajax使用post方式请求ashx获取json格式数据时“contentType: 'application/json;charset=utf-8'” 此属性不能显示指定,否则,后台Request获取不到键值对。
3.对应ashx文件一般不需要显示指定返回值类型,context.Response.ContentType = "application/json"; 等。
4.当返回json格式数据时,应当是
类似 ResponseText("{\"language\":\"" + chinese + "\"}");的否则前台jquery自动解析出错。
5.从整个上面多种方式的请求来看,在指定上述几种Ajax参数的情况下,在后台获取前台传递的中文数据没有出现乱码。
  评论这张
 
阅读(5)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018