如题.
还是直接用例子说明来的直接些.
本人的项目中通过jquery.ajax调用webservice.
客户端代码如下:
1 $.ajax({ 2 url: "test/xxx.asmx", 3 type: 'POST', 4 dataType: 'xml', 5 timeout: 1000, 6 data: { name: "zhangsan", tags: ["aa", "bb", "cc"] }, 7 error: function(xml) { 8 alert(xml.responseText); 9 }, 10 success: function(xml) { 11 alert("OK"); 12 } 13 14 });
服务端代码如下:
1 [WebMethod] 2 public XmlDocument xxx(string name, string [] tags ) 3 { 4 return sth; 5 }
总是抛出异常.
问题出现在这里:
下面是HTTP数据:
POST http://xxx.com/xxx.asmx/xxx HTTP/1.1 Host: center.cmis.htpc.com.cn Connection: keep-alive Content-Length: 55 Cache-Control: max-age=0 Origin: http://xxx.com User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: application/xml, text/xml, */*; q=0.01 Referer: http://xxx.com/xxx.aspx Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 name=zhangsan&tags%5B%5D=aa&tags%5B%5D=bb&tags%5B%5D=cc
而它期望的格式是如下的:
POST /xxx.asmx/xxx HTTP/1.1
Host: xxx.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
name=string&tags=string&tags=string
比较上面粗体,post的数据除了问题. 正确的应该如下:
name=zhangsan&tags=aa&tags=bb&tags=cc
看来问题出在jquery.ajax上面了.见代码(jquery.1.8.3.js)
1 function buildParams(prefix, obj, traditional, add) { 2 var name; 3 4 if (jQuery.isArray(obj)) { 5 // Serialize array item. 6 jQuery.each(obj, function(i, v) { 7 if (traditional || rbracket.test(prefix)) { 8 // Treat each array item as a scalar. 9 add(prefix, v); 10 11 } else { 12 // If array item is non-scalar (array or object), encode its 13 // numeric index to resolve deserialization ambiguity issues. 14 // Note that rack (as of 1.0.0) can't currently deserialize 15 // nested arrays properly, and attempting to do so may cause 16 // a server error. Possible fixes are to modify rack's 17 // deserialization algorithm or to provide an option or flag 18 // to force array serialization to be shallow. 19 20 //ytx 20130411 21 buildParams(prefix, v, traditional, add); 22 //buildParams(prefix + "[" + (typeof v === "object" ? i : "") + "]", v, traditional, add); 23 } 24 }); 25 26 } else if (!traditional && jQuery.type(obj) === "object") { 27 // Serialize object item. 28 for (name in obj) { 29 buildParams(prefix + "[" + name + "]", obj[name], traditional, add); 30 } 31 32 } else { 33 // Serialize scalar item. 34 add(prefix, obj); 35 } 36 }
结论:
出问题的代码在22行,我修改成21行那样就行了.
不过,我对js/jquery都是一知半解的,希望不要引起别的后遗症,呵呵.
相关推荐
### jQuery中通过ajax调用webservice传递数组参数的问题实例详解 在Web开发中,经常会遇到需要通过异步JavaScript和XML(AJAX)技术与服务器端的WebService进行通信,并传递数据的场景。当需要传递数组参数给...
本文将详细介绍如何使用jQuery的Ajax方法来调用WebService,并通过具体的示例代码来阐述其工作原理及实践应用。 #### 二、基础知识 在深入探讨之前,我们先了解一下基础概念: 1. **Ajax**:一种在无需重新加载整个...
在.NET中,你可以创建一个ASMX文件来定义你的服务方法,然后在jQuery的Ajax调用中引用这些方法。 在调用过程中,需要注意的是跨域问题。由于同源策略的限制,Ajax请求通常只能访问同源(协议+域名+端口)的资源。...
资源名称:jQuery使用Ajax方法调用WebService 中文WORD版内容简介:本文档将jQuery使用Ajax 调用WebService 的几个常用的方法做了一个整理,提供给正在找这方面内容的朋友,希望能给学习jQuery的朋友一点帮助。...
在本文中,我们将深入探讨如何使用jQuery的Ajax方法来调用WebService。jQuery是一个流行的JavaScript库,它极大地简化了DOM操作、事件处理以及包括Ajax在内的异步数据通信。Ajax(Asynchronous JavaScript and XML)...
3、WebService服务非常全面,返回值分为空、字符串、对象、数组、集合、DataSet等,参数也区分了有参和无参,绝对全面。4、部署的时候注意了,先将WebService发布在IIS上,然后自己调整下程序内部的IP和端口号即可。...
通过以上步骤,我们可以实现在jQuery中跨域调用WebService的功能。需要注意的是,JSONP 只支持 GET 请求,因此如果需要发送 POST 请求,则需要考虑其他跨域方案,如 CORS (Cross-Origin Resource Sharing)。此外,...
.asmx/GetWords", //调用 WebService 的地址和方法名称组合 ---- WsURL/方法名 data: JSON.stringify({ word: 'example' }), //传递参数,使用 JSON.stringify 将对象序列化为 JSON 格式 dataType: 'json', success:...
本示例将深入探讨如何使用jQuery来调用WebService,通过源代码解析相关知识点。 首先,了解jQuery的核心功能对理解jQuery调用WebService至关重要。jQuery提供了`$.ajax()`函数,它是进行异步数据请求的基础。在这个...
在使用jQuery AJAX调用带有参数的Web Service并期望返回XML数据时,需要注意一些关键细节以确保数据能够正确传输和解析。以下是对这个问题的详细解释: 首先,jQuery的AJAX方法用于在不刷新整个页面的情况下与...
在.NET开发环境中,jQuery是一个广泛使用的JavaScript库,用于在客户端进行高效的DOM操作、事件处理以及Ajax交互。而Web服务(Webservice)则是提供跨平台、跨语言的数据交换能力。本教程将通过一个简单的示例来讲解...
jQuery调用Webservice传递json数组的方法涉及了前端JavaScript库jQuery与后端Web服务的交互,并且在交互中传递了JSON格式的数据。JSON,即JavaScript Object Notation,是一种轻量级的数据交换格式,易于人阅读和...
ASP.NET 是一个强大的Web应用程序开发框架,由微软...通过在ASP.NET页面中添加UpdatePanel,并配置触发器,我们可以实现后台方法的AJAX调用。例如,一个简单的ASP.NET AJAX调用aspx页面的方法可能如下: ```asp.net ...
这里,我们利用Ajax调用WebService,获取照片数据,然后在客户端进行处理,达到无刷新的效果,提升用户体验。Jquery库简化了Ajax操作,提供了易于使用的API,使得异步请求变得简单。 在前端展示方面,Jquery对DOM...
ASP.NET 编程知识 - ASP.NET 如何定时调用 ... ASP.NET 程序员可以通过学习本文,掌握如何定时调用 WebService 服务,并且了解如何使用 jQuery 和 Ajax 调用 WebService 服务,从而提高应用程序的功能和性能。
"MvcAndAjax"这个文件名可能代表了一个包含MVC项目和相关的JavaScript文件的示例,用于演示如何在MVC应用中使用AJAX调用WebService。在这个项目中,你可能会找到一个控制器、视图以及用于调用WebService的...
webService中要实现ajax调用,则要加这句代码: // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] 代码下载 /201008/yuanma/WebService2....