Share Pastebin
Guest
Public paste!

Teuzz

By: a guest | Mar 22nd, 2010 | Syntax: HTML | Size: 6.21 KB | Hits: 107 | Expires: Never
Copy text to clipboard
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3.   <head>
  4.   <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  5.   <meta name="generator" content="PSPad editor, www.pspad.com">
  6.   <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
  7.   <script>
  8.  
  9.  
  10. window.jQuery = window.jQuery || {};
  11.  
  12. jQuery.rpc = function(url, dataType, onLoadCallback, version) {
  13.         return new (function(url, dataType, onLoadCallback, version) {
  14.                 version = version || "1.0";
  15.                 dataType = dataType || "json";
  16.                 if(dataType != "json" && dataType != "xml") {
  17.                         new Error("IllegalArgument: Unsupported data type");
  18.                 }
  19.                 var _self = this;
  20.                 var serializeToXml = function(data) {
  21.                         switch (typeof data) {
  22.                         case 'boolean':
  23.                                 return '<boolean>'+ ((data) ? '1' : '0') +'</boolean>';
  24.                         case 'number':
  25.                                 var parsed = parseInt(data);
  26.                                 if(parsed == data) {
  27.                                         return '<int>'+ data +'</int>';
  28.                                 }
  29.                                 return '<double>'+ data +'</double>';
  30.                         case 'string':
  31.                                 return '<string>'+ data +'</string>';
  32.                         case 'object':
  33.                                 if(data instanceof Date) {
  34.                                         return '<dateTime.iso8601>'+ data.getFullYear() + data.getMonth() + data.getDate() +'T'+ data.getHours() +':'+ data.getMinutes() +':'+ data.getSeconds() +'</dateTime.iso8601>';
  35.                                 } else if(data instanceof Array) {
  36.                                         var ret = '<array><data>'+"\n";
  37.                                         for (var i=0; i < data.length; i++) {
  38.                                                 ret += '  <value>'+ serializeToXml(data[i]) +"</value>\n";
  39.                                         }
  40.                                         ret += '</data></array>';
  41.                                         return ret;
  42.                                 } else {
  43.                                         var ret = '<struct>'+"\n";
  44.                                         jQuery.each(data, function(key, value) {
  45.                                                 ret += "  <member><name>"+ key +"</name><value>";
  46.                                                 ret += serializeToXml(value) +"</value></member>\n";
  47.                                         });
  48.                                         ret += '</struct>';
  49.                                         return ret;
  50.                                 }
  51.                         }
  52.                 }
  53.                 var xmlRpc = function(method, params) {
  54.                         var ret = '<?xml version="'+version+'"?><methodCall><methodName>'+method+'</methodName><params>';
  55.                         for(var i=0; i<params.length; i++) {
  56.                                 ret += "<param><value>"+serializeToXml(params[i])+"</value></param>";
  57.                         }
  58.                         ret += "</params></methodCall>";
  59.                         return ret;
  60.                 }
  61.                 var parseXmlValue = function(node) {
  62.                         childs = jQuery(node).children();
  63.                         for(var i=0; i < childs.length; i++) {
  64.                                 switch(childs[i].tagName) {
  65.                                 case 'boolean':
  66.                                         return (jQuery(childs[i]).text() == 1);
  67.                                 case 'int':
  68.                                         return parseInt(jQuery(childs[i]).text());
  69.                                 case 'double':
  70.                                         return parseFloat(jQuery(childs[i]).text());
  71.                                 case "string":
  72.                                         return jQuery(childs[i]).text();
  73.                                 case "array":
  74.                                         var ret = [];
  75.                                         jQuery("> data > value", childs[i]).each(
  76.                                                 function() {
  77.                                                         ret.push(parseXmlValue(this));
  78.                                                 }
  79.                                         );
  80.                                         return ret;
  81.                                 case "struct":
  82.                                         var ret = {};
  83.                                         jQuery("> member", childs[i]).each(
  84.                                                 function() {
  85.                                                         ret[jQuery( "> name", this).text()] = parseXmlValue(jQuery("value", this));
  86.                                                 }
  87.                                         );
  88.                                         return ret;
  89.                                 case "dateTime.iso8601":
  90.                                         /* TODO: fill me :( */
  91.                                         return NULL;
  92.                                 }
  93.                         }
  94.                 }
  95.                 var parseXmlResponse = function(data) {
  96.                         var ret = {};
  97.                         ret.version = version;
  98.                         jQuery("methodResponse params param > value", data).each(
  99.                                 function(index) {
  100.                                         ret.result = parseXmlValue(this);
  101.                                 }
  102.                         );
  103.                         jQuery("methodResponse fault > value", data).each(
  104.                                 function(index) {
  105.                                         ret.error = parseXmlValue(this);
  106.                                 }
  107.                         );
  108.                         return ret;
  109.                 }
  110.                 var rpc_contents = {
  111.                         'xml':'text/xml'
  112.                         ,'json':'application/json'
  113.                 };
  114.                 var _rpc = function(method, callback) {
  115.                         var params = [];
  116.                         for (var i=2; i<arguments.length; i++) {
  117.                                 params.push(arguments[i]);
  118.                         }
  119.                         // console.log(params);
  120.                         var data;
  121.                         if(dataType == 'json') {
  122.                                 data = {"version":version, "method":method, "params":params};
  123.                         } else {
  124.                                 data = xmlRpc(method, params);
  125.                         }
  126.                         jQuery.ajax({
  127.                                 "url": url,
  128.                                 "dataType": dataType,
  129.                                 "type": "POST",
  130.                                 "data": data,
  131.                                 "success": function(inp) {
  132.                                         var json = inp;
  133.                                         if(dataType == "xml") {
  134.                                                 json = parseXmlResponse(inp);
  135.                                         }
  136.                                         // console.log("json response:", json);
  137.                                         callback(json);
  138.                                 },
  139.                                 "processData": false,
  140.                                 "contentType": rpc_contents[dataType]
  141.                         });
  142.                 };
  143.                 _rpc("system.listMethods",
  144.                         function(json) {
  145.                                 // console.log(json);
  146.                                 /* get the functions */
  147.                                 if(!json.result) {
  148.                                         return;
  149.                                 }
  150.                                 var proc = null;
  151.                                 for(var i = 0; i<json.result.length; i++) {
  152.                                         proc = json.result[i];
  153.                                         var obj = _self;
  154.                                         var objStack = proc.split(/\./);
  155.                                         for(var j = 0; j < (objStack.length - 1); j++){
  156.                                                 obj[objStack[j]] = obj[objStack[j]] || {};
  157.                                                 obj = obj[objStack[j]];
  158.                                         }
  159.                                         /* add the new procedure */
  160.                                         obj[objStack[j]] = (
  161.                                                 function(method, obj) {
  162.                                                         var _outer = {"method":method,"rpc":_rpc};
  163.                                                         return function(callback) {
  164.                                                                 var params = [];
  165.                                                                 params.push(_outer.method);
  166.                                                                 params.push(callback);
  167.                                                                 for (var i=1; i<arguments.length; i++) {
  168.                                                                         params.push(arguments[i]);
  169.                                                                 }
  170.                                                                 _rpc.apply(_self, params);
  171.                                                         }
  172.                                                 }
  173.                                         )(proc, _rpc);
  174.                                 }
  175.                                 // console.log('Load was performed.');
  176.                                 if(onLoadCallback) {
  177.                                         onLoadCallback(_self);
  178.                                 }
  179.                         }
  180.                 );
  181.         })(url, dataType, onLoadCallback, version);
  182. };
  183.  
  184.  </script>
  185.   <title></title>
  186.   </head>
  187.   <body>
  188.       <script>
  189.       $(document).ready(function() {
  190.       var xml = "<methodCall><methodName>ontheroad.getDevices</methodName><params><param><value><string>a5caced6e6b742749500ae2708aef98b</string></value></param></params></methodCall>";
  191.       console.log("sdf");
  192.       $.rpc("http://api.ontheroad.to/api/1.0/xmlrpc/OnTheRoad.ashx", "xml",function(server) {
  193.                                                console.log("abc");
  194.                                        if(!server || !server.system) {
  195.                                                 alert("fail");
  196.                                                return;
  197.                                        }
  198.                                        
  199.                                        console.log(server);
  200.                                        alert("abcd");
  201.                                        
  202.                                });
  203.                                });
  204.       </script>
  205.   </body>
  206. </html>