在Javscript中使用JSON, Asp.Net中 PageMethods的使用

<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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章