<html>
<header>
<title>在Javscript中使用JSON, Asp.Net中 PageMethods的使用</title>
</header>
<script type="text/javascript">
var cc = "test";
var myJSONObject =
{ "bindings": [
{ "ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*" },
{ "ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*" },
{ "ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*" }
]
};
function test()
{
var testval=myJSONObject.bindings[0].method;
alert('myJSONObject.bindings[0].method : ' + testval);
document.getElementById('testJSON1').innerHTML = 'JSON string:' + obj2str(myJSONObject) + '<BR/>' + 'myJSONObject.bindings[0].method : ' + testval;
}
function test2()
{
var myJSONtext='{ "test": [{"col1":"11","col12":"12"},{"co21":"21","co22":"22"}]}';
var myObject = eval('(' + myJSONtext + ')');
document.getElementById('testJSON2').innerHTML = myJSONtext;
alert(myObject.test[0].col12);
}
function test3()
{
document.getElementById('testJSON1').innerHTML = '';
document.getElementById('testJSON2').innerHTML = '';
debugger
}
function obj2str(o)
{
var r = [];
if (typeof o == "string") return "/"" + o.replace(/([/'/"//])/g, "//$1").replace(/(/n)/g, "//n").replace(/(/r)/g, "//r").replace(/(/t)/g, "//t") + "/"";
if (typeof o == "object")
{
if (!o.sort)
{
for (var i in o)
r.push(i + ":" + obj2str(o[i]));
if (!!document.all && !/^/n?function/s*toString/(/)/s*/{/n?/s*/[native code/]/n?/s*/}/n?/s*$/.test(o.toString))
{
r.push("toString:" + o.toString.toString());
}
r = "{" + r.join() + "}"
}
else
{
for (var i = 0; i < o.length; i++)
r.push(obj2str(o[i]))
r = "[" + r.join() + "]"
}
return r;
}
return o.toString();
}
</script>
<body>
<pre>
在Javscript中使用JSON, Asp.Net中 PageMethods的使用
</pre>
<input type="button" value="Test" οnclick="test();"/>
<span id="testJSON1" ></span>
<br />
<input type="button" value="Test2" οnclick="test2();"/>
<span id="testJSON2" ></span>
<br />
<input type="button" value="Reset" οnclick="test3();"/>
<br/>
<div>
<pre>
1. C#實現PageMethods
設置ScriptManager的EnablePageMethods屬性爲True,在Page添加WebMethod attib如下:
[WebMethod]
public static string GetPayGroup(string orgId, string subsidiary, string chargeto, string chargecode){}
2. 使用PageMethods調用的方法如下:
PageMethods.[MethodName](parameter1, parameter2, …, SuccessMethod, FailedMethod, userContext);
其中
Parameter?爲與Server端一一對應的參數.
SuccessMethod,必需,WebMethod正確返回時的回調函數,原型爲onSuccess(result).
FailedMethod,非必需,WebMethod出錯返回時的回調函數,原形爲onFailed(error).
3. 返回值及出錯處理。
返回值的獲取:
SuccessMethod第一個參數爲Server方法返回值.
出錯處理:
可能通過提供FailedMethod處理Server拋出的異常, FailedMethod的第一個參數爲Server端異常對應的客戶端對象,可以通過error.get_message()獲取異常信息.
對ScriptManager中PageMethods的默認設置如下:
// This is the failed callback function when using PageMethods.
function FailedCallback(error)
{
var stackTrace = error.get_stackTrace();
var message = error.get_message();
var statusCode = error.get_statusCode();
var exceptionType = error.get_exceptionType();
var timedout = error.get_timedOut();
if (timedout)
{
alert("An timeout error occurred(" + statusCode + "):" + message);
}
else
{
alert("An error occurred(" + statusCode + "):" + message);
}
}
PageMethods.set_defaultFailedCallback(FailedCallback);
PageMethods.set_timeout(50000);
</pre>
</div>
</body>
</html>