让webservice输出json

  要让webservice输出json,需要使用.net framework 3.5中的命名空间System.Web.Script.Services.ScriptService

  发现.net自带的ajax.net使用webservice输出的是json,其中关键的就是在请求时:Content-Type:application/json;utf-8,所以我们只要在POST时加上一个Content-Type:application/json;utf-8就可以了
+展开
-JavaScript
 $.ajax({
   type: "POST",
   contentType:"application/json;utf-8",
   url: "/Server/PicLib.asmx/HelloWorld",
   success: function(msg){
   var json = eval('(' + msg + ')');
   alert(json.d);}
});



+展开
-JavaScript
var json = eval('(' + msg + ')');

  (这个是把返回的字符值转换成json对象,这样子才能够正常的操作json,这里可以用try来捕捉一下错误,因为如果返回的字符串不是标准的json的话就会出错。)

  上面的js要成功运行需要对.net做一下设置让“WebService输出JSON”

  修改WebService,导入一个属性

+展开
-C#
    <%@?WebService?Language="C#"?Class="WebService1"?%>
    [System.Web.Script.Services.ScriptService()]
    [WebService(Namespace = "http:///showbo/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "hello world!"
        }
    }




在webconfig中添加:
+展开
-XML
    <httpHandlers>
      <remove verb="*path="*.asmx"/>
      <add verb="*path="*.asmxvalidate="falsetype="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    httpHandlers>

注意:这个是关键,这样子才能使请求asmx文件时让它输出json格式,刚刚开始时测试了很久都不行。

  在vs2008 简体中文版+jquery 1.2.3下通过测试。


  在测试过程中“顺便”发现了jq的一个"BUG"
  在设置Content-Type时,发现怎么样设置jq总是不理不踩,
  查看了一下jq的ajax方法哪一段源码,看到了如下的代码:
+展开
-JavaScript
            if ( s.data )
                xml.setRequestHeader("Content-Type", s.contentType);

  上面的data是ajax请示的参数,当参数值不为空才设置请求的Content-Type
  我不知道这个到底是不是它的bug,在实际使用的时,你会碰到在调用webservice的一个方法,而这个方法是没有参数时,这样子
  如果你不想修改jq的源码的话,就在请求时附加一些无用的数据,如:data:"{}",不然jq可是会发“烂咂”(脾气)哦~呵呵

  以上的问题还请使用jq的朋友们注意一下。

来源:http://www.cnblogs.com/regedit/archive/2008/03/04/1089948.html

加支付宝好友偷能量挖...


评论(0)网络
阅读(1477)喜欢(1)Asp.Net/C#