zoukankan      html  css  js  c++  java
  • jquery调用WebService和WebService输出JSON

    (环境:vs2008+jquery1.2.3)
    发现.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的话就会出错。)

    上面的js要成功运行需要对.net做一下设置让“WebService输出JSON”
    修改WebService,导入一个属性
     

    <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可是会发“烂咂”(脾气)哦~呵呵

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

    应朋友们的要求我写了个简单的演示,源码里已写好注释了,请大家查看相关的源码
    演示是vs2008(vb)写的,下载源码

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/luluping/p/1301392.html
Copyright © 2011-2022 走看看