技术开发 频道

jquery调用WebService和WebService输出JSON


【IT168技术文档】


  发现.net自带的ajax.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(msg){ var json = eval('(' + msg + ')'); alert(json.d);} });
  var json = eval('(' + msg + ')');
  (这个是把返回的字符值转换成json对象,这样子才能够正常的操作json,这里可以用try来捕捉一下错误,因为如果返回的字符串不是标准的json的话就会出错。)
<System.Web.Script.Services.ScriptService()> <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class WebService1 Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld(ByVal str As String, ByVal name As String) As String Return str & name End Function End Class
  在webconfig中添加:
<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="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方法哪一段源码,看到了如下的代码:
if ( s.data ) xml.setRequestHeader("Content-Type", s.contentType);
  上面的data是ajax请示的参数,当参数值不为空才设置请求的Content-Type
  我不知道这个到底是不是它的bug,在实际使用的时,你会碰到在调用webservice的一个方法,而这个方法是没有参数时,这样子
  如果你不想修改jq的源码的话,就在请求时附加一些无用的数据,如:data:"{}",不然jq可是会发“烂咂”(脾气)哦~呵呵
0
相关文章