您的位置:首页 > Web前端 > JQuery

jquery ajax,ashx,json用法小结

2011-11-02 11:11 211 查看
jquery提供的简化版的ajax调用方法通常如下:
function post() {

$("#divWait").show();

$("#btnPost").attr("disabled", "disabled");

$.post("../PostIt.ashx",

{

msgContent: $("#msgContent").val()

},

function (data) {

if (data.indexOf('OK') > -1) {

alert(data);

}

else {
}

$("#divWait").hide();

$("#btnPost").attr("disabled", "");

});

}
在开发的时候,要接受json格式的返回值时,上面的方法貌似不能行,上面的方法貌似接受的是text的文本行。因此,采用jQuery的底层Ajax实现方法。
该方法参数也很多,具体可看帮助文档。本人的常规用法
function doPostAjax(){

$("#divWait").show();

$("#btnPost").attr("disabled", "disabled");

$.ajax({

url: '../PostIt.ashx',

type: 'POST',

dataType: 'json',

data: { msgContent: $("#msgContent").val() },

timeout: 60000,

error: function (XMLHttpRequest, textStatus, errorThrown) {//请求错误 时执行的方法

alert("error!" + errorThrown);

$("#divWait").hide();

$("#btnPost").attr("disabled", "");

},

success: function (data, txtSataus) {//请求成功时执行的方法

showContent(data.content, data.createdate);

$("#divWait").hide();

$("#btnPost").attr("disabled", "");

}
});

}

在ashx代码段,要设置好返回的格式。
context.Response.ContentType = "application/json";
如果是返回的html或者text的话可以如下写法
context.Response.ContentType = "text/plain";
如果ajax方法中设置的返回值是json时,ashx代码返回的格式必须是json格式的数据。
把一个对象转换成json格式,常用方法就是采用开源的第三方类库json.net,Newtonsoft.Json.dll.
JsonConvert.SerializeObject方法就可以转换了。返回json格式后,jquery就可以采用XXX.xxx的方式获取值了。
JsonConvert在处理datetime格式的时候,会返回类似1198908717056的绝对值,因此,在处理datetime的时候,要做一下转换。具体语句如下:
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();

//这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式

timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";

string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter);
此处顺便提一下,javascript对json格式的数据有着天生的处理能力,非常好的兼容json格式数据。
举个例子:
function pppp() {

var person = { "name": "jack", "age": 24,"sex": true };

alert(person.name);

alert(person.age);

alert(person.sex);

}
这样的代码可以直接写出来,在vs2010的代码编辑器中还可以有代码提示。很强大。
ashx完整代码如下:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Threading;

using Newtonsoft.Json;

using Newtonsoft.Json.Converters;
namespace nnn

{

/// <summary>

/// PostIt 的摘要说明

/// </summary>

public class PostIt : IHttpHandler

{
public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "application/json";

try

{

string msgContent = context.Request["msgContent"] ?? "";

ModelContent m = new ModelContent()

{

author = "",

categoryid = -1,

title = "",

content = msgContent,

datetime = DateTime.Now,

key = "",

createdate = DateTime.Now,

lastmodifydate = DateTime.Now,

ip = context.Request.UserHostAddress
};
//BLLContent bll = new BLLContent();

//bll.Add(m);
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();

//这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式

timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";

string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter);

context.Response.Write(output);

}

catch (Exception ex)

{

context.Response.Write(ex.Message);

}
}
public bool IsReusable

{

get

{

return false;

}

}

}

}
本文出自 “一只博客” 博客,请务必保留此出处/article/4123863.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: