从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中使用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