jquery调用WebService和WebService输出JSON
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/regedit/archive/2008/03/04/1089948.html
(环境:vs2008+jquery1.2.3)
发现.net自带的使用webservice输出的是json,其中关键的就是在请求时:
Content-Type:application/json;utf-8
所以我们只要在POST时加上一个Content-Type:application/json;utf-8就可以了
$.ajax({
type: "POST",
contentType:"application/json;utf-8",
url: "/Server/PicLib.asmx/HelloWorld",
success: function(m sg){
var json =eval('(' + msg + ')');
alert(json.d);}
});
var json = eval('(' + msg + ')');
(这个是把返回的字符值转换成json对象,这样子才能够正常的操作json,这里可以用try来捕捉一下错误,因为如果返回的字符串不是标准的json的话就会出错。)
上面的js要成功运行需要对.net做一下设置让“WebService输出JSON”
修改WebService,导入一个属性
Public Class WebService1
Inherits System.Web.Services.WebService
Public Function HelloWorld(ByVal str As String, ByVal name As String) As String Return str & name
End Function
End Class
在webconfig中添加:
注意:这个是关键,这样子才能使请求asmx文件时让它输出json格式,刚刚开始时测试了很久都不行。
在vs2008 简体中文版+jquery 1.2.3下通过测试。
在测试过程中“顺便”发现了jq的一个"BUG"
在设置Content-Type时,发现怎么样设置jq总是不理不踩,
查看了一下jq的ajax方法哪一段源码,看到了如下的代码:
if ( s.data )
xml.setRequestHeader("Content-Type", s.contentType);
上面的data是ajax请示的参数,当参数值不为空才设置请求的Content-Type
我不知道这个到底是不是它的bug,在实际使用的时,你会碰到在调用webservice的一个方法,而这个方法是没有参数时,这样子
如果你不想修改jq的源码的话,就在请求时附加一些无用的数据,如:data:"{}",不然jq可是会发“烂咂”(脾气)哦~呵呵
以上的问题还请使用jq的朋友们注意一下。
应朋友们的要求我写了个简单的演示,源码里已写好注释了,请大家查看相关的源码
演示是vs2008(vb)写的,下载源码