4

I am new to titanium and and want to call a web service from my titanium app. The webService returns the json response. As I am aware of calling the webService using XMLRPC but very confused regarding json.

Until now, I know that we have to create the HTTPClient.

var request = Titanium.Network.createHTTPClient();
request.open("POST", "http://test.com/services/json");
request.onload = function() {
    var content = JSON.parse(this.responseText);//in the content i have the response data
};

request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //did not understand this line
request.send();

Now the problem is if my url(endpoints) have many WebServices, so where i will give the method name i.e WS name which is to be called.

From the API documentation of Titanium mobile the function open i.e. request.open accepts 3 parameters:

  1. method name (http method name)

  2. url of request

  3. async (boolean property) by default true.

In the above code what is "POST" doing there?? and if my WS name is system.connect then where i will be mentioning that in code?

And what if the WS needs parameter, so how can we send the parameter to the webService form the above code.

I know that request.send() can be used to send parameter but how ??

puk
  • 16,318
  • 29
  • 119
  • 199
Ajeet Pratap Maurya
  • 4,244
  • 3
  • 28
  • 46

1 Answers1

14

To invoke a webservice you should:

    // create request
    var xhr = Titanium.Network.createHTTPClient();
    //set timeout
    xhr.setTimeout(10000);

    //Here you set the webservice address and method
    xhr.open('POST', address + method);

    //set enconding
    xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");

    //send request with parameters
    xhr.send(JSON.stringify(args));

    // function to deal with errors
    xhr.onerror = function() {

    };

    // function to deal with response
    xhr.onload = function() {
        var obj = JSON.parse(this.responseText);

    };

address is your webservice url.

method is the method you desire to invoke.

address+method is a URL, in your example: "http://test.com/services/json" the method invoked would be named json.

args: is a json object where it's variable names should have the exact same name as the webservice parameters. You can create a the parameters object like this:

var args = {};
args.parameter1 = 'blabla';
args.parameter2 = 'blaaaa';
Canastro
  • 2,979
  • 30
  • 39
  • what you mean by address+method..suppose my address is http://alpha.com/services/json and my method is system.connect so according to you it will be http://alpha.com/services/json + system.connect or http://alpha.com/services/json/system.connect ?? – Ajeet Pratap Maurya Jan 03 '12 at 13:30
  • When i had the + sign, i was concatenating two strings. One with the URL of the webservice endpoint "alpha.com/services/json" and other with the method "system.connect". You can do that or just write the full url: "alpha.com/services/json/system.connect". Probably you should test if your webservice is working correctly, you may use fiddler2 to test it. – Canastro Jan 03 '12 at 13:38
  • well your code got me the idea and finally i managed to make it more usable. I will mark your answer correct.. – Ajeet Pratap Maurya May 30 '12 at 10:29
  • xhr.send(); is missing – Jay Gajjar May 10 '16 at 11:55