使用jquery与asp.net的webservice 进行通讯

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形式的。

Technorati 标签: ,,

 

这种使用起来麻烦的地方是需要构造一个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;
});

发表评论

电子邮件地址不会被公开。 必填项已用*标注