我有一个简单的javascript对象。我用JSON.stringify序列化它我把它发送到一个只返回它的asp.net web函数。但是当我尝试使用JSON解析返回的字符串时,我得到了
Microsoft JScript运行时错误:字符无效
$(document).ready(function() {
$.ajax({
type: "POST",
url: "test.aspx/PassBackdata",
contentType: "application/json; charset=utf-8",
data: "{'args': '" + JSON.stringify(MyObject) + "'}",
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
});
function AjaxSucceeded(result) {
var a=JSON.parse(result);
}
function AjaxFailed(result) {
alert(result.status + ' ' + result.statusText);
}
};
<System.Web.Services.WebMethod()> _
Public Shared Function PassBackdata(args As String)
Return args
End Function
我该如何解决这个问题?谢谢
答案 0 :(得分:3)
如果succes函数发生错误,您可能需要检查结果对象的格式。我不得不使用var a=JSON.parse(result.d);
,因为这是webservice返回的方式,它不是直接的json,而是带有“d”字段的对象,它是json。
为了检查结果,我使用fiddler。
答案 1 :(得分:0)
而不是:
"{'args': '" + JSON.stringify(MyObject) + "'}"
试试这个:
JSON.stringify({args: MyObject})
不要自己做JavaScript可以为你做的事情;)
答案 2 :(得分:0)
然而,知道MyObject的样子会有所帮助:
JSON必须具有双引号的键名,而不是单引号。尝试这样的事情:
$(document).ready(function() {
$.ajax({
type: "POST",
url: "test.aspx/PassBackdata",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({args:MyObject}),
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
});
function AjaxSucceeded(result) {
var a=JSON.parse(result);
}
function AjaxFailed(result) {
alert(result.status + ' ' + result.statusText);
}
};
答案 3 :(得分:0)
如果我这样做:JSON.parse(result.d)
而不是JSON.parse(result)
它有效。
function AjaxSucceeded(result) {
var a=JSON.parse(result.d);
}
不知道为什么