最近項目中遇到需要使用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;