当前位置: 首页 > news >正文

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的方法名前面还需要加上命名空间,否则会报错

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

转载于:https://www.cnblogs.com/sa9527/p/4222619.html

相关文章:

  • Silverlight 之 创建
  • hdu 5122 K.Bro Sorting
  • ios编译库文件时出现的问题
  • 给编程一个你热爱它的机会
  • Qt 静态编译后的exe太大, 可以这样压缩.
  • 企业报销系统完整设计方案
  • FBX .NET
  • Struts 1 之配置文件
  • ios判断是否有中文
  • Linux多线程实例练习 - pthread_exit() 与 pthread_join()
  • [简介]HTML5 and CSS3
  • LexYacc Parser错误发生后再次parser之前恢复初始状态
  • ae开发基础功能
  • 水果的英文名称
  • LaTeX学习笔记
  • [ JavaScript ] 数据结构与算法 —— 链表
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2019年如何成为全栈工程师?
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 网络编程(2):UDP 的使用
  • mysql innodb 索引使用指南
  • mysql 数据库四种事务隔离级别
  • python大佬养成计划----difflib模块
  • Rancher如何对接Ceph-RBD块存储
  • SAP云平台里Global Account和Sub Account的关系
  • Spark RDD学习: aggregate函数
  • 产品三维模型在线预览
  • 关于for循环的简单归纳
  • 和 || 运算
  • 精彩代码 vue.js
  • 判断客户端类型,Android,iOS,PC
  • 前端代码风格自动化系列(二)之Commitlint
  • 设计模式走一遍---观察者模式
  • 中文输入法与React文本输入框的问题与解决方案
  • 【干货分享】dos命令大全
  • Java总结 - String - 这篇请使劲喷我
  • linux 淘宝开源监控工具tsar
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #pragma multi_compile #pragma shader_feature
  • #QT(TCP网络编程-服务端)
  • (03)光刻——半导体电路的绘制
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二)c52学习之旅-简单了解单片机
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四)Controller接口控制器详解(三)
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Windows2003安全设置/维护
  • .Net 代码性能 - (1)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net程序集学习心得
  • @selector(..)警告提示
  • [ C++ ] STL_list 使用及其模拟实现
  • [AR Foundation] 人脸检测的流程