Jquery 调用.net WebService 返回Json、XML方法

由于项目需要,使用前端、手机客户端调用ASP.NET的Webservice来获取信息.所以这段时间重温一下Jquery与Web Serivce,过程中碰到不少问题,也有不少的收获。

Service代码

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string myMethod(string para)
        {
            return "Hi," + para;
        }
        [WebMethod]
        [ScriptMethod(UseHttpGet = true)]
        public string myMethod1(string para)
        {
            return "Hi," + para;
        }

  

Web端调用方法

1.Json POST方法(有参)

$.ajax({
            url: "WebServer.asmx/myMethod",
            contentType: "application/json;charset=utf-8",
            beforeSend: function (x) {
                x.setRequestHeader("Content-Type", "application/json;charset=utf-8");
            },
            data: "{para:‘post参数‘}",
            dataType: "json",
            type: "POST",
            error: function (x, e) {
                alert(x.responseText);
            },
            success: function (json) {
                alert(json.d);
            }
        });

注意:1) ajax中的data:"{paraName:paraValue}",如果该方法无参数,则格式为:data:"{}",再次注意还有红色的两引号,不可少

2) 如果成功,我是以HTML的形式显示它的值,大家可以用其它方法,取它的值时用(result.d)

2.Json GET方法(有参)

        $.ajax({
            url: "webserver.asmx/myMethod1",
            data: "para=‘get参数‘",
            type: "GET",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            error: function (x, e) {
                alert(x.responseText);
            },
            success: function (json) {
                alert(json.d);
            }
        });

注意:1) ajax中的data:"para=paraValue",如果有汉字的参数值,可以使用encodeURI编一下码,如果该方法无参数,则格式为:data:""

2) 如果成功,取它的值时用(result.d)

3.XML POST方法(有参)

$.ajax({
            url: "webserver.asmx/myMethod",
            data: {para: ‘post参数‘},
            type: "POST",
            dataType: "application/xml",
            error: function (x, e) {
                alert(x.responseText);
            },
            success: function (xml) {
                alert(xml);
            }
        });

这块,data中的para的值为值类型,去掉单引号也可以,不会报错,小弟特意测试过,如果你们去掉后出错了,请给小弟留言说明,当para的值为string类型时,单引号不可去掉,如果是中文最好编一下码,操作成功后返回XML文档,其他地方就没什么可说的了。

4.XML GET 方法 (有参)

$.ajax({
            url: "webserver.asmx/myMethod1",
            data: encodeURI("para=Post参数"),
            type: "GET",
            dataType: "application/xml",
            error: function (x, e) {
                alert(x.responseText);
            },
            success: function (xml) {
                alert(xml);
            }
        });

这里需要注意,ajax中的data:"para=paraValue",如果有汉字的参数值,最好encodeURI编一下码,操作成功后返回XML文档。

5.XML SOAP POST方法

function getPostData() {
        //根据WSDL分析myMethod是方法名,para是传入参数名
        var postdata = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        postdata += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        postdata += "<soap:Body>";
        postdata += "<myMethod xmlns=\"http://tempuri.org/\">";
        postdata += "<para>"+"aa"+"</para>";
        postdata += "</myMethod>";
        postdata += "</soap:Body>";
        postdata += "</soap:Envelope>";
        return postdata;
    }
$.ajax({
                    type: "POST",
                    url: "webserver.asmx",
                    data: getPostData(),
                    dataType: "xml",
                    contentType: "text/xml; charset=utf-8",
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader(‘SOAPAction‘, ‘http://tempuri.org/myMethod‘);
                    },
                    success: function (xml) {
                        $(xml).find("myMethod_XMLResult").each(function (i) {
                            alert($(this).children("Title").text());
                        });
                    },
                    error: function (x, e) {
                        alert(‘error:‘ + x.responseText);
                    },
                    complete: function (x) {
                        //alert(‘complete:‘+x.responseText);
                    }
                });

使用SOAP协议时,请注意上面POST的地址后面并没有像请求JSON数据时一样加上/方法名,而SOAPAction的方法名前面还需要加上命名空间,操作成功后返回的是一个XML格式对象而不是XML文档,可以使用JS来解析XML对象

总结:

1.使用POST方法时,要注意data的参数格式

2.参数中有汉字时最好encodeURI编码

3.使用SOAP时,注意POST地址后面没有/方法名,并且需要在SOAPAction的方法名前面还需要加上命名空间,否则会报错

以上是小弟参考各位大神资料及自己在测试中的问题解决的总结,如有错请指正。

时间: 2024-10-24 23:57:26

Jquery 调用.net WebService 返回Json、XML方法的相关文章

ajax调用后台webservice返回JSON字符

后台代码: [WebMethod] public static string LoginTest(string userCode, string password) { UserManageCenterService service = new UserManageCenterService(); string msg = string.Empty; service.AuthenticateUser(userCode, password, 10000, out msg); if (msg ==

jQuery调用WebService返回JSON数据

相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. 在用jQuery调用WebService的时候,它contentType默认为 以下是WebService服务端的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.W

WebService返回json格式数据供苹果或者安卓程序调用

1.新建一个WebService. 2. 1 /// <summary> 2 /// DemoToJson 的摘要说明 3 /// </summary> 4 [WebService(Namespace = "http://tempuri.org/",Description=("<br><p >西安xx公司</p>技术支持:王光旭"))] 5 [WebServiceBinding(ConformsTo = W

2.Webservice返回json数据并去掉Xml头部。

问题: 我将结果内容用字符串拼接成Json数据并返回的时候,会在结果前面添加xml头部,结果如下. <span style="font-size:14px;"><string xmlns="http://tempuri.org/"> {"data":[{"batchId":"B001","produceOrderId":"", "pr

WebService 返回json格式和返回xml格式的数据

返回json格式 //using System.Web.Script.Services; [WebMethod] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public void HelloWorld() { Context.Response.Clear(); Context.Response.ContentType = "application/json"; Model.User.U

WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// </summary>         /// <param name="UserName">用户名</param>         /// <param name="UserPwd">密码</param>    

ASP.net jQuery调用webservice返回json数据的一些问题

之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, 这是第一次真正的在实际中运用ajax,卡了一个小时才做好简单的信息展示. 在这之间遇到了两个问题.写下来分享给大家,也加深一下自己的印象. 有错误的地方还请大神指出. 前端js代码: 1 <script type="text/javascript"> 2 $(function

Struts2+Jquery实现ajax并返回json类型数据

主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数据 网上看到很多关于Struts2+ajax+jquery+json的例子,但是很多都不完整,也看不明白,主要原因是返回jsno类型数据和原来的返回字符串类型数据不一样,并且网友们实现步骤没有说清楚,让初学的朋友捉摸不透到底该怎么做. 我做了个简单的demo,供网友们学习,最后我会附上链接,可以下载整个de

JQuery调用iframe父页面元素与方法

JQuery操作iframe父页面与子页面的元素与方法 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元素的方法: $('#id', window.parent.document) 第二.在父页面中获取iframe中的元素方法: $(this).contents().find("#suggestBox") 第三.在iframe中调用父页面中定义的方法和变量: parent.method parent.value 第四.