asp.net有一套非常完善的框架可以很容易写出符合标准的提供webapi的程序。但是如果使用第三方的软件(如用jquery 的ajax)调用的话会出现一些细节上的问题。
比如:vs2010里面创建了一个webservice默认支持两种方法:
post进去一个json,返回一个json
post进去一个xml,返回一个xml
由于使用jquery构造一个json字符串还比较简单,解析起来也不困难。所以我首先采用了这种方法
下面给出了一个示例:
js端:
jsondata = “{examinees_name:'” + encodeURI($(‘#txtname’).val()) + “‘,examinees_ID:'” + $(‘#examinees_ID’).val() + “‘,examinees_psw:'” + $(‘#password1’).val() + “‘,examinees_email:'” + $(‘#email’).val() + “‘}”;
$.ajax({
type: “POST”,
contentType: “application/json”,
url: “WebService.asmx/register”,
data: jsondata,
success: function (data) {
alert(data.d);
}
});
上面的代码中中jsondata构造出了一个json字符串来传递参数,通过表单元素构造出类似
“{examinees_name:’NAME’,examinees_ID:’123456′,examinees_psw:’123456′,examinees_email:’p@p.com’}”
这样的字符串post给服务端WebService.asmx/register
注意其中
contentType: “application/json”,
这个参数告诉服务器传递参数是以json形式的。
这种使用起来麻烦的地方是需要构造一个json字符串来传递参数,如果对于表单元素比较多,写起来就比较麻烦,而且也不方便维护。
其实WebService还支持直接post和get参数的方法,不过需要经过配置
在web.config文件里面的<webServices>节点按照如下配置即可使其支持直接post参数的方法。返回是一个xml。
<webServices>
<protocols>
<add name=”HttpSoap”/>
<add name=”HttpPost”/>
<add name=”Documentation”/>
</protocols>
</webServices>
还可以加上
<add name=”HttpGet”/>
使其支持直接get传递参数的办法。
再给出一个直接使用post ajax实现登录的示例:
$(“#login_form”).bind(“submit”, function() {
if ($(“#login_name”).val().length < 1 || $(“#login_pass”).val().length < 1) {
$(“#login_error”).show();
$.fancybox.resize();
return false;
}
$.fancybox.showActivity();
$.ajax({
type : “POST”,
cache : false,
url : “WebService.asmx/examineesLogin”,
data : $(this).serializeArray(),
success: function(xml) {
$(xml).find(“boolean”).each(function(){ //找到xml根节点
if ($(this).text()==’true’)
{
$.fancybox.close();
}else{
$.fancybox(‘用户名或密码错误,登陆失败’);
}
});
}
});
return false;
});