最近项目中遇到需要使用Json传递数据到SharePoint后台的 ashx,goole下方案,但遇到不少问题。最终解决了,把遇到的问题和大家分享下。
function ExecuteAjax(type, url, data, successCallBack, failedCallBack, alwaysCallBack) {
// Added time stamp,加这个是为了防止浏览器认为地址一样的请求可以直接取缓存数据,加了时间戳会让每次请求的Url不一样,这样浏览器就不会偷懒了
if (url.indexOf("?") != -1) {
url += "timestamp=" + Date.now();
}
else {
url += "?timestamp" + Date.now();
}
$.ajax({
type: type,
data: JSON.stringify(data), // 一定要用JSON.stringify
dataType: 'json',
contentType: 'application/json',
url: url
})
.done( function (result) {
successCallBack(result);
})
.fail (function(errorMessage)
{
if (failedCallBack) {
failedCallBack(errorMessage);
}
})
.always ( function () {
if (alwaysCallBack) {
alwaysCallBack();
}
});
}
var dataForPost= { "PostId": 1, "WebUrl": 'blog' };
网上有些文章说可以直接在后台用context.Request.Params['DataKey']来取Json数据,但是我试过是不行的
因此我用的方式是在后台新建一个类用于接收从Json反序列化回来的对象
public class PostData
{
public string PostId { get; set; }
public string WebUrl { get; set; }
}
反序列化
context.Response.ContentType = "application/json";
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
PostData postData = jsonSerializer.Deserialize<PostData>(json);
注意如果在发送数据时没有用JSON.stringify,返序列化时会出错。
web.AllowUnsafeUpdates = true;