-
jQuery调用WebService网上的介绍也比较多,最近的项目中我也用到不少,一直都很少用.NET Ajax,比较钟情于jQuery调用请求WebService有几种方法,这主要说一下POST与GET方法,其实安全方法考虑不建议使用GET方法,下面就说一下用jquery调用WebService的参数设置及设置不当所出现的问题,还有出现问题的原因。我们这里只讨论返回JSON数据的情况,相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,或者我以后再写一篇这方面的文章。
下面是jQuery调用WebService服务器端代码:
WS1和WS2方法为POST方法请求的方法,所以设置UseHttpGet 为false,WS3与WS4为GET方法请求的方法,设置UseHttpGet 为true。
using System.Web.Script.Services; using System.Web.Services; namespace WebService35 { /// /// WebService1 的摘要说明 /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] [ScriptMethod(UseHttpGet = false)] public string WS1() { return "POST无参数"; } [WebMethod] [ScriptMethod(UseHttpGet = false)] public string WS2(string s) { return s; } [WebMethod] [ScriptMethod(UseHttpGet = true)] public string WS3() { return "GET无参数"; } [WebMethod] [ScriptMethod(UseHttpGet = true)] public string WS4(string s) { return s; } } }
function fun1() { $.ajax({ url: "WebService1.asmx/WS1", type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", data: "", success: function(json) { alert(json.d); }, error: function(x, e) { alert(x.responseText); }, complete: function(x) { alert(x.responseText); } }); }
上面的JS方法为用POST方法请求无参数的WebService方法的代码,不过以上代码并不能返回正确的JSON格式的数据,而是返回XML格式的数据,回为要使WebService返回JSON格式的数据,要在Request Headers中设置Content-Type为application/json,有人要问了,你不设置了contentType为“application/json; charset=utf-8”了吗?没错,是设置了,不过在jquery中,如果Content-Length为0或者没有设置,它会忽略你设置的contentType的,我可以看下面的这个图,这是抓取的Request Headers的数据,可以看到Content-Length为0,并且没有Content-Type,所WebService就不知道我们需要JSON格式的数据,它就返回了默认的XML格式的数据给我们,之所以为0,是因为我没有提交任何数据。
这要怎么办呢?继续看下面的JS代码,因为我们这里是调用的一个没能参数的WebService方法,所以我们可以提交一个空和JSON对象“{}",如下所示,设置data为{}。
function fun1() { $.ajax({ url: "WebService1.asmx/WS1", type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", data: "{}", success: function(json) { alert(json.d); }, error: function(x, e) { alert(x.responseText); }, complete: function(x) { alert(x.responseText); } }); }
还有一种方法就是:既然jquery不给我们设置Content-Type,我们可以自己设置,如下面的代码所示,我们在发送数据之前设置一下Content-Type为“application/json; charset=utf-8”,这样就可以了。
function fun1() { $.ajax({ url: "WebService1.asmx/WS1", type: "POST", dataType: "json", data: "", beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, success: function(json) { alert(json.d); }, error: function(x, e) { alert(x.responseText); }, complete: function(x) { alert(x.responseText); } }); }
下面是我们手工设置了Content-Type之后抓取的Request Headers,可以看到,即使Content-Length为0,里面也有了正确的Content-Type了。
不过,需要注意的是:如果我们设置了jquery的contentType,又发送了一个空的JSON对象,并且还手工设置了Content-Type,就如下代码所示:
function fun1() { $.ajax({ url: "WebService1.asmx/WS1", type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", data: "{}", beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, success: function(json) { alert(json.d); }, error: function(x, e) { alert(x.responseText); }, complete: function(x) { alert(x.responseText); } }); }
那么在IE发送的Requst Headers就如下图所示,你会看到Content-Type有两个用逗号隔开的值,这是为什么呢?因为,jquery为Content-Type设置了一次值,我们手工又设置一次,而在IE是多次设置Content-Type的值它会追加,而不是替换,不过这并不影响WebService正确返回JSON数据给我们,不过应该避免这种情况出现。
果说上面那种设置两次Content-Type的值还能正确的返回JSON数据,那么下面代码就不能正确返回JSON数据了。
function fun1() { $.ajax({ url: "WebService1.asmx/WS1", type: "POST", dataType: "json", data: "{}", beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, success: function(json) { alert(json.d); }, error: function(x, e) { alert(x.responseText); }, complete: function(x) { alert(x.responseText); } }); }
从下图可以看到Content-Type也有两个值,不过这个和上面那个还有点不一样,这次呢这个值是不一样的,一个是application/x-www-form-urlencoded,一个是application/json; charset=utf-8,这种情况就不能正确的返回JSON格式的数据了。这又是为什么呢?这是因为我们没有为jquery设置contentType为,并且又提交了一个空的JSON对象,可以为什么这样就会使用Content-Type出现这样的情况的呢?因为jquery的ajax用POST方法提交数据的时候,如果没有设置contentType,并且所发送的数据不为空,那么它就会为ContentType设置一个默认值,也就是application/x-www-form-urlencoded,所以就会出现这种情况了。 所以呢,在用POST方法请求的时候,如果有提交数据,也就是jquery ajax的datar属性不空的情况下(不为空的情况:1.发送一个空对象调用无参数的WebService方法;2.请一个有参数的WebService方法。),一定要设置contentType属性,并且不能手工设置Content-Type了。 下面是请求有参数的WebService方法,一些情况在上面也都说过了,这里就不多说了。 不过有一点要注意,就是用POST方法请求的时候,不用手工去编码有汉字的参数值,如下面的data: "{s:'POST有参数'}",就不用写成data: "{s:"+encodeURI('POST有参数')+"}"了。
以上是我们说的用POST方法请求,下面是用GET方法请求。 下面是一个用GET方法请求一个无参数的WebService方法,不过这是一段错误的代码,错在哪儿呢,各们童鞋可以自己想一下,我们下面一起说。
下图是正确的用GET方法(有参数和无参数)调用WebService方法所抓取的Request Headers。 从上图可以看到,用GET方法请求,不管是有参数还是无参数,都是没有Content-Length的,所以jquery也就不能为我们设置Content-Type了,我只能手工设置Content-Type,所以我们也就没有必要设置jquery ajax的contentType了。 需要注意的是,GET方法与POST方法不同,有参数的时候,如果参数的值不是ASCII字符,要用encodeURI编一下码,要不服务端接收到的数据为乱码。
function fun2() {
$.ajax({
url: "WebService1.asmx/WS2",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: "{s:'POST有参数'}",
success: function(json) {
alert(json.d);
},
error: function(x, e) {
alert(x.responseText); ;
},
complete: function(x) {
alert(x.responseText);
}
});
}
function fun3() {
$.ajax({
url: "WebService1.asmx/WS3",
type: "GET",
dataType: "json",
data: "",
contentType: "application/json; charset=utf-8",
success: function(json) {
alert(json.d);
},
error: function(x, e) {
alert(x.responseText);
},
complete: function(x) {
alert(x.responseText);
}
});
}
下面的代码是正确的用GET方法调用无参数的WebService方法。
function fun3() {
$.ajax({
url: "WebService1.asmx/WS3",
dataType: "json",
data: "",
beforeSend: function(x) {
x.setRequestHeader("Content-Type", "application/json; charset=utf-8");
},
success: function(json) {
alert(json.d);
},
error: function(x, e) {
alert(x.responseText);
},
complete: function(x) {
alert(x.responseText);
}
});
}
下面的代码是正确的用GET方法调用有参数的WebService方法
function fun4() {
$.ajax({
url: "WebService1.asmx/WS4",
dataType: "json",
data: encodeURI("s='GET有参数'"),
beforeSend: function(x) {
x.setRequestHeader("Content-Type", "application/json; charset=utf-8");
},
success: function(json) {
alert(json.d);
},
error: function(x, e) {
alert(x.responseText);
},
complete: function(x) {
alert(x.responseText);
}
});
}
发表评论
-
转载:jquery webservice 跨域
2013-01-28 16:06 1289现在的JQuery中$.ajax方法支持跨域读取json数 ... -
变更地址栏参数
2011-09-14 10:06 822<html> <head ... -
仿google 日历
2011-08-24 23:10 903仿google 日历仿google 日历仿google 日历仿 ... -
Jquery fullcalendar 官方中文文档
2011-08-22 08:47 25121. 使用方式, 引入相关js, css后, $(‘#div_ ... -
js webservice
2011-05-12 08:50 11101. 创建webservice,为了免于落俗我稍稍修改了 ... -
光标位置函数
2010-12-16 12:44 811function getCursortPosi ... -
select元素javascript常用操作
2010-12-14 09:32 653东西很简单,只是自己记性不好,经常忘记一些关键字 所以发 ... -
cookie
2010-09-17 09:06 701function SetCookie(CookieNa ... -
js 类的实现 转载
2010-05-14 10:43 791JavaScript本身并不是设计成面向对象的,所以没 ... -
jsxiaoguo
2009-05-14 10:52 739jsxiaoguo -
窗体大小
2009-05-12 09:39 904网页可见区域宽:document.body.clientWid ... -
闭包小例
2009-02-05 08:53 751//A是一个普通的函数 ... -
js other event target
2008-11-20 14:41 1151解耦导航模式 function Onclick(evt) ... -
用 javascript 处理 JSON
2008-11-19 14:33 1308用 javascript 处理 JSON 关键字: json ... -
js 倒计时
2008-11-13 09:28 988<!doctype html public " ... -
Javascript中最常用的55个经典技巧
2008-09-27 17:47 8821. oncontextmenu="window.e ... -
js xml
2008-09-17 10:53 1220loadXML = function(xmlFile) ... -
正则表达式
2008-09-12 09:04 829数:44] //校验是否全由数字组成 function ... -
js 函数
2008-09-11 13:12 8181.document.write(""); ... -
js 验证函数
2008-09-11 13:03 711Javascript函数大全 /* ---------- ...
相关推荐
JavaScript(JS)调用WebService是Web开发中常见的一种交互方式,允许前端JavaScript代码与后端服务进行通信,实现数据的动态获取和提交。本压缩包包含了一个简单的示例项目——"WebApplication1",用于演示如何使用...
在JavaScript中调用WebService,通常采用AJAX(Asynchronous JavaScript and XML)技术,尽管现在XML已经不是唯一的数据交换格式,JSON更常被使用。以下是一个简单的AJAX调用WebService的JavaScript示例: ```...
3. **AJAX**:在本项目中,JavaScript与Web Service之间的通信很可能使用了AJAX(Asynchronous JavaScript and XML),尽管实际传输的数据可能是JSON格式。AJAX允许页面在不刷新整个页面的情况下与服务器交换数据并...
在MVC中,JavaScript通常用于增强用户体验,通过AJAX(Asynchronous JavaScript and XML)技术实现在不刷新整个页面的情况下更新视图。在本例中,JavaScript将用于调用WebService。 3. **WebService基础知识** ...
在JavaScript中,通常使用Ajax(Asynchronous JavaScript and XML)技术来异步地调用WebService。Ajax允许我们在不刷新整个页面的情况下与服务器进行通信。XMLHttpRequest对象是实现Ajax的核心,它提供了一个发送...
JavaScript 获取 Web Service 天气预报是一项常见的Web开发任务,它涉及到使用 AJAX (Asynchronous JavaScript and XML) 技术与Web服务进行异步通信,获取特定城市的天气信息。在这个示例中,我们看到一个通过...
5. **JavaScript调用WebService**:在客户端,可以通过JavaScript直接调用WebService,特别是在XPages应用中,可以使用dojo.xhrPost或其他Ajax库来实现。这通常涉及到创建XMLHttpRequest对象,构造SOAP请求,并处理...
WebService接口利用WSDL(Web Services Description Language)定义服务接口,UDDI(Universal Description, Discovery, and Integration)用于服务注册和发现,以及SOAP进行消息传输。相比于HTTP接口,WebService...
在Web页面中,通常使用AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)技术来异步发送请求到服务器并获取响应。在这个例子中,通过创建一个XMLHttpRequest对象(在旧版IE浏览器中使用ActiveXObject)...
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。本实例将重点讲解如何利用AJAX进行异步调用WebService...
WSDL(Web Services Description Language)用于描述WebService的接口,UDDI(Universal Description, Discovery, and Integration)则提供了服务注册和发现机制。 在C#中,我们可以使用.NET框架提供的ASMX(ASP...
在本篇文章中,我们将深入探讨XMLHTTP对象、WebService以及它们在ASP和JavaScript(JS)环境中的结合使用。 首先,XMLHTTP对象是微软ActiveX的一个组件,它支持HTTP协议,可以用于创建无刷新的Ajax(Asynchronous ...
它使用WSDL(Web Service Description Language)定义服务接口,UDDI(Universal Description, Discovery and Integration)进行服务注册和查找,而SOAP(Simple Object Access Protocol)则用于消息传输。...
在Web开发领域中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于实现页面局部刷新等功能,极大地提升了用户体验。结合jQuery这一流行的JavaScript库,开发者可以更加便捷地利用Ajax与服务器进行数据交换...
6. **添加页面功能**:将调用WebService的部分集成到Web页面中,这可能涉及到前端JavaScript或者后端服务器端语言如ASP.NET、PHP或JSP。页面上的按钮、表单或其他交互元素可以触发对WebService的调用,处理返回的...
Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下更新部分网页的技术。它通过JavaScript与服务器进行通信,实现了页面的局部刷新,提高了用户体验。Ajax的核心是XMLHttpRequest对象,它...
首先,理解Ajax(Asynchronous JavaScript and XML)的核心概念是关键。Ajax允许网页在不刷新整个页面的情况下与服务器进行通信,实现了数据的动态更新。jQuery通过封装Ajax函数,使得开发者可以更方便地使用Ajax...
接下来,我们需要使用AJAX(Asynchronous JavaScript and XML)技术来发送SOAP请求。虽然AJAX名称中有XML,但现代实现可以处理JSON和其他数据格式。使用XMLHttpRequest对象或者更现代的fetch API,我们可以向...
首先,我们需要了解Ajax,即异步JavaScript和XML(Asynchronous JavaScript and XML)。尽管其名称中包含“XML”,但实际应用中,数据格式可以是JSON、XML或其他文本格式。Ajax的主要优点在于它可以在不刷新整个页面...
这通常通过AJAX(Asynchronous JavaScript and XML)或者现代Web技术如Fetch API实现。 异步登录验证过程如下: 1. 用户在客户端填写用户名和密码。 2. 客户端通过JavaScript发送一个异步请求到WebService端点,...