In my previous post, I presented a JavaScript CoreService client that was using the out-of-the-box Visual Studio project and a WCF generated JS proxies using the Microsoft AJAX framework.
In this blog post, I write about a JQuery client for CoreService that is lighter and only depends on JQuery. I took my inspiration from Yoav's blog post Creating a Webservice Proxy with jQuery
The server part remains untouched. This means I can only focus on the JavaScript client.
CoreService is secured with Basic or Federated authentication. I am focusing on Basic auth in this post, mainly because it is so simple to use from JS.
The main entry point in the code is the ServiceProxy class. This is where we define the constructor and where we set the endpoint to use for CoreService and the username, password combination to use.
The ServiceProxy makes use of the JQuery's $.ajax function, where it performs a POST to the CoreService endpoint, sets the payload to send, Authorization header and the success, failed callback functions.
The code above also declares method getCurrentUser, which calls the CoreService GetCurrentUser method without posting any payload.
Notice that the JS code only requires the JQuery library and the ServiceProxy we defined earlier.
Since we are declaring contentType as application/json, JQuery will parse and decode the JSON response from the web-service into a JavaScript object.
In this blog post, I write about a JQuery client for CoreService that is lighter and only depends on JQuery. I took my inspiration from Yoav's blog post Creating a Webservice Proxy with jQuery
The server part remains untouched. This means I can only focus on the JavaScript client.
CoreService is secured with Basic or Federated authentication. I am focusing on Basic auth in this post, mainly because it is so simple to use from JS.
The main entry point in the code is the ServiceProxy class. This is where we define the constructor and where we set the endpoint to use for CoreService and the username, password combination to use.
The ServiceProxy makes use of the JQuery's $.ajax function, where it performs a POST to the CoreService endpoint, sets the payload to send, Authorization header and the success, failed callback functions.
ServiceProxy = function (adminUser, adminPassword, endpoint) { this._basicAuth = "Basic " + btoa(adminUser + ":" + adminPassword); this._baseURL = endpoint; }; ServiceProxy.prototype = { _defaultErrorHandler: function (xhr, status, error) { alert(xhr.status + " " + xhr.statusText + "\r\n" + xhr.responseText); }, _doAjax: function (method, data, fnSuccess, fnError, isAsync) { if (!data) data = {}; if (isAsync == undefined) isAsync = true; if (!fnError) fnError = this._defaultErrorHandler; $.ajax({ type: "POST", url: this._baseURL + method, data: data, contentType: "application/json; charset=utf-8", headers: { "Authorization": this._basicAuth }, success: fnSuccess, error: fnError, async: isAsync }); }, getCurrentUser: function (success, error) { this._doAjax("GetCurrentUser", null, success, error); } };
The code above also declares method getCurrentUser, which calls the CoreService GetCurrentUser method without posting any payload.
The HTML
The sample code below connects to the CoreService endpoint defined earlier and performs a sample call to retrieve the current user.Notice that the JS code only requires the JQuery library and the ServiceProxy we defined earlier.
Since we are declaring contentType as application/json, JQuery will parse and decode the JSON response from the web-service into a JavaScript object.
<!DOCTYPE html> <html> <head> <script src="jquery-1.10.2.js"></script> <script src="ServiceProxy.js"></script> </head> <body> <script type="text/javascript"> var proxy = new ServiceProxy("mihai@adfs", "p@assword", "https://web85.playground/webservices/CoreService201603.svc/rest/"); function userSuccess(result) { if (!result) { alert("no result"); return; } if (result.hasOwnProperty("d")) { result = result.d; } alert("Retrieved user: " + result.Id + " | " + result.Description); } $(document).ready(function () { proxy.getCurrentUser(userSuccess); }); </script> </body> </html>
Comments