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

本文关键字:参数 返回 数据集 调用 Javascript web 服务 | 更新日期: 2023-09-27 18:28:58

我在C#中创建了一个web服务,现在需要从移动应用程序中调用它。我正在尝试创建一个Windows7移动应用程序,但使用HTML5和Javascript,而不是本地代码。web服务接受两个参数,电子邮件和密码,并返回一个数据集。我真的没有任何javascript经验(或者web服务经验,试图通过这个项目学习),当我试图研究如何使用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>

当我按下提交按钮时,此代码不起任何作用。有人能指出问题是什么,我如何解决它们吗?或者建议我应该研究什么来解决问题,让我走上正轨吗?非常感谢您的帮助。

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

首先,如果您想在javascript中使用JSON对象,那么您的Web服务应该返回一个JSON对象。当然,您可以返回任何XML/字符串,但使用JSON将非常容易地在javascript中使用数据。

然后,我建议您使用jquery来调用Web服务,因为jquery会为您做很多工作。

阅读本文,它将帮助您正确设置不同的组件:

我会使用jQuery来做这种事情。它提供的ajax功能非常易于使用。我会使用显示模块模式(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代码中使用某种结构,我只会在一个文件中得到一堆函数。

我有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的引用。我希望这能有所帮助。

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

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