admin管理员组

文章数量:1335840

I have created a web service in C# and now need to call it from a mobile app. I'm trying to create a Windows 7 mobile app, but using HTML5 and Javascript not the native code. The web service takes 2 parameters, Email and Password, and returns a Dataset. I don't really have any javascript experience (or web services experience for that matter, trying to learn with this project), and when trying to research how to call a web service using javascript I just found too much information and didn't know where to begin because so many other technologies were also mentioned.

So I decided to try things out and this is what I came up with so far:

<script type="text/javascript">

      document.addEventListener("deviceready", onDeviceReady, false);

      // once the device ready event fires, you can safely do your thing! -jm
      function onDeviceReady() {

      }

      function LoginButton_onclick() {
      UpdateChildrenApp.PhoneWebServices.GetMyChildren(document.getElementById('EmailBox').value,document.getElementById('PasswordBox').value, OnComplete, OnError)
  }

  function OnComplete(result) {
      for (var i = 0; i < result.tables[0].rows.length; i++)
          document.getElementById('Test').innerHTML += ''+(result.tables[0].rows[i].col_name);
  }

  function OnError(result) {
     document.getElementById('Test').innerHTML ='Error :'+result.get_message();
  }

  </script>

This code does nothing when I press the submit button. Could someone please point out what the problems are and how I can fix them or suggest what I should research to address the problems and put me on the right track? Any help is greatly appreciated.

I have created a web service in C# and now need to call it from a mobile app. I'm trying to create a Windows 7 mobile app, but using HTML5 and Javascript not the native code. The web service takes 2 parameters, Email and Password, and returns a Dataset. I don't really have any javascript experience (or web services experience for that matter, trying to learn with this project), and when trying to research how to call a web service using javascript I just found too much information and didn't know where to begin because so many other technologies were also mentioned.

So I decided to try things out and this is what I came up with so far:

<script type="text/javascript">

      document.addEventListener("deviceready", onDeviceReady, false);

      // once the device ready event fires, you can safely do your thing! -jm
      function onDeviceReady() {

      }

      function LoginButton_onclick() {
      UpdateChildrenApp.PhoneWebServices.GetMyChildren(document.getElementById('EmailBox').value,document.getElementById('PasswordBox').value, OnComplete, OnError)
  }

  function OnComplete(result) {
      for (var i = 0; i < result.tables[0].rows.length; i++)
          document.getElementById('Test').innerHTML += ''+(result.tables[0].rows[i].col_name);
  }

  function OnError(result) {
     document.getElementById('Test').innerHTML ='Error :'+result.get_message();
  }

  </script>

This code does nothing when I press the submit button. Could someone please point out what the problems are and how I can fix them or suggest what I should research to address the problems and put me on the right track? Any help is greatly appreciated.

Share Improve this question asked Mar 24, 2012 at 11:58 MattMatt 3,97016 gold badges53 silver badges73 bronze badges 3
  • my thought process might be pletely wrong, but doesn't your page need to be ajaxified to update results from the callback into the UI? – Aadi Droid Commented Mar 24, 2012 at 12:02
  • That's my problem, I lack the background knowledge to know what to do, and need some pointers on where to start, so someone else would have to confirm your suggestion. thanks :) – Matt Commented Mar 24, 2012 at 12:06
  • since the second ment sort off goes in the same lines as what i said, i'm adding my answer below. – Aadi Droid Commented Mar 25, 2012 at 8:33
Add a ment  | 

3 Answers 3

Reset to default 2

First, your webservices should return a JSON object if you want to use it in javascript. You can of course return any XML/string, but using JSON will be A LOT easy to use the data in javascript.

Then, I would advise you to use jquery to call the webservice, as jquery will do a lot of work for you.

Read this article, it should help you set different ponents correctly:

I would use jQuery to do this kind of thing. The ajax functionality its provides is really easy to use. I would use the Revealing Module Pattern (RMP) and 2 javascript files. If you're unfamiliar with the RMP, there is a great post covering it here:

http://weblogs.asp/dwahlin/archive/2011/08/02/techniques-strategies-and-patterns-for-structuring-javascript-code-revealing-module-pattern.aspx

I find that if I dont employ some kind of structure to my js code using the RMP, I just end up with a mess of functions in one file.

Id have Startup.js and Dataservice.js and they would look something like this:

Startup.js

var Startup = function () {
    var isValid,
        dataObject = {},

    populateDataObject = function () {
        dataObject.dealer = $("[id$='_txtUser']").val();
        dataObject.password = $("[id$='_txtPassword']").val();

    },

  init = function () {
        var dealerId = 0;

        $("[id$='_SubmitButton']").bind('click', function (evt) {
            evt.preventDefault();
            populateDataObject();


            if (isValid) {
                Dataservice.processLoginRequest(dataObject, processLoginRequestResult);
            }
        });
    };

    return {
        init: init,
        processLoginRequestResult: processLoginRequestResult
    };

} ();

Dataservice.js (assumes old school .asmx, change as needed)

var Dataservice = function () {

    $.ajaxSetup({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });

    var serviceBase = '../services/LoginService.asmx/',

    processScreenRequest = function (valObject, callback) {
        $.ajax({
            url: serviceBase + "ProcessLoginRequest",
            data: JSON.stringify(valObject),
            success: function (json) {
                callback(json);
            }
        });
    };

    return {
        processScreenRequest: processScreenRequest
    };

} ();

and then I would include refereces to these 2 js files as well as jquery in my html page. I hope this helps.

I've used Dojo for this once, its pretty simple you can make xhrget or xhrpost requests. It has a function called load that is the callback where you can modify the contents of the HTML ponents in the page.

Use these links : http://dojotoolkit/reference-guide/1.7/dojo/xhrGet.html

本文标签: cCalling a web service from Javascript (passing parameters and returning dataset)Stack Overflow