从Javascript调用Web服务(传递参数和返回数据集)

时间:2012-03-24 11:58:14

标签: c# javascript web-services windows-phone-7

我在C#中创建了一个Web服务,现在需要从移动应用程序中调用它。我正在尝试创建一个Windows 7移动应用程序,但使用HTML5和Javascript而不是本机代码。 Web服务采用电子邮件和密码两个参数,并返回数据集。我真的没有任何javascript经验(或者网络服务经验,尝试学习这个项目),当试图研究如何使用javascript调用Web服务时,我发现了太多的信息而且不知道从哪里开始,因为还提到了许多其他技术。

所以我决定尝试一下,这是我到目前为止所提出的:

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

当我按下提交按钮时,此代码不执行任何操作。有人可以指出问题是什么,我如何解决它们或建议我应该研究什么来解决问题并让我走上正轨?任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:2)

我会使用jQuery来做这种事情。 它提供的ajax功能非常易于使用。 我会使用Revealing Module Pattern(RMP)和2个javascript文件。如果你不熟悉RMP,可以在这里找到一篇很好的文章:

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

我发现如果我不使用某种结构来使用RMP的js代码,我只会在一个文件中使用一堆函数。

Id有Startup.js和Dataservice.js,它们看起来像这样:

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(假设旧学校.asmx,根据需要更改)

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

} ();

然后我会在我的html页面中包含对这两个js文件以及jquery的引用。 我希望这会有所帮助。

答案 1 :(得分:2)

首先,如果你想在javascript中使用它,你的webservices应该返回一个JSON对象。 您当然可以返回任何XML /字符串,但使用JSON将很容易使用javascript中的数据。

然后,我建议你使用jquery来调用webservice,因为jquery会为你做很多工作。

阅读this article,它可以帮助您正确设置不同的组件:

答案 2 :(得分:1)

我曾经使用Dojo一次,非常简单,你可以发出xhrget或xhrpost请求。它有一个名为load的函数,它是一个回调函数,您可以在其中修改页面中HTML组件的内容。

使用以下链接:http://dojotoolkit.org/reference-guide/1.7/dojo/xhrGet.html