jquery, ajax, json

需要解析的 数据格式
{
    "status":0,
    "message":"ok",
    "total":4030,
    "results":[
        {
            "name":"成大方圆连锁药店青堆分店",
            "location":{
                "lat":39.836746,
                "lng":123.271671
            },
            "address":"双河大街598号附近",
            "detail":1,
            "uid":"7388dffd069db9ebd3ff2363",
            "detail_info":{
                "tag":"医疗;药店",
                "type":"hospital",
                "detail_url":"http://api.map.baidu.com/place/detail?uid=7388dffd069db9ebd3ff2363&output=html&source=placeapi_v2",
                "price":"0",
                "overall_rating":"2.9",
                "service_rating":"0",
                "technology_rating":"0",
                "image_num":"1"
            }
        },
        {
            "name":"安康大药房昌盛店",
            "location":{
                "lat":39.699406,
                "lng":122.983766
            },
            "address":"延安路芙蓉小区附近",
            "telephone":"(0411)89838258",
            "detail":0,
            "uid":"2a7a25ec5f11c91d6c3e1bf2",
            "detail_info":{
                "tag":"医疗;药店"
            }
        },

想要得到name,address,telephone,detail_url等信息。

前台:
<script type="text/javascript">
        function GetDrugStoreData() {
            $.ajax({ 
               type: "post", 
               url: "http://api.map.baidu.com/place/v2/search?ak=BHYd9MhP6fMWrASjxtEYOGtz&output=json&query=%E8%8D%AF%E6%88%BF&page_size=10&page_num=0&scope=2&region=%E5%A4%A7%E8%BF%9E", 
               dataType: "json", 
               success: function (data) { 
                        $("input#showTime").val(data[0].demoData); 
               }, 
               error: function (XMLHttpRequest, textStatus, errorThrown) { 
                        alert(errorThrown); 
               }
            });
        }
</script>

后台:
        Dim jsonstr As String = ""
        jsonstr = JsonConvert.SerializeObject(DrugInfo)

        If Request.QueryString("ajax") IsNot Nothing Then
            Dim method As String = ""
            method = Request.QueryString("ajax").ToString().Trim().ToLower()

            If method = "GetDrugStoreData" Then
                Response.Clear()
                Response.Write(jsonstr)
                Response.End()
            End If
        End If

完全不懂这方面,请大家帮忙。

回答: jquery, ajax, json

  1. 前台可以将你的json字符串转为对象。。

struts2+jquery+ajax+json为什么$.post回调函数无法执行

  1. Q
    如下是我的代码:
    js:

    $(function() {

    $("#look").click(function() {
    alert("look");
    var url = "json.action";
    var params = {
    name : "kobe"
    };
    $.post(url, params, function(data) {
    alert("post");//此句一直没反应
    $("#result").text("后台来的数据");
    }, "json");
    });

    });


    Action:

    public class jsonAction extends ActionSupport{

    private String result;

    @Override
    public String execute() throws Exception {
    // TODO Auto-generated method stub

    // HttpServletResponse responce = ServletActionContext.getResponse();
    // PrintWriter out = responce.getWriter();

    System.out.println("后台");//此句已经执行

    // out.println(result); 这一句测试过也不行
    Map<String,String> map = new HashMap<String,String>();
    map.put("name", "kobe");
    map.put("age", "23");
    JSONObject jo = JSONObject.fromObject(map);
    result = jo.toString();

    return SUCCESS;
    }


    public String getResult() {
    return result;
    }

    public void setResult(String result) {
    this.result = result;
    }

    }


    struts.xml

        <package name="default" namespace="/" extends="json-default">

            <default-action-ref name="index" />

            <action name="index">
                <result>/index.jsp</result>
            </action>
            
            <action name="json" class="action.jsonAction">
             <result type="json">
             <param name="root">result</param>
             </result>
            </action>

        </package>


    后台jsonAction 代码已经执行,因为控制台中输出“后台”

    但是前台的$.post的回调函数总是不执行,alert("post");一直不执行。

    我用的jar包如下:
    commons-lang3-3.1.jar;
    json-lib-2.3-jdk15.jar;
    jsonplugin-0.34.jar;
    ezmorph-1.0.6.jar;
    commons-beanutils-1.8.0.jar;
    commons-collections-3.2.1.jar

    而且后台没有报任何错误,求高手指点,弄了很久,纠结死了。谢谢了
  2. A
    你将xml中的 <result type="json">改为<result name="success" type="json">

    action 中的  return SUCCESS;改为return "success";
            

求一段代码实例:ajax结合jquery和json的增,删,改,查的实例.

  1. Q
    求一段代码实例:ajax结合jquery和json的增,删,改,查的实例。谢谢!
  2. A
    这个不错
    http://download.csdn.net/source/1137466

Bootstrap2不能用JQuery AJAX方式提交表单吗?

  1. Q
    Bootstrap2不能用JQuery AJAX方式提交表单吗?
    用了很多方法都不能提交AJAX方式的表单,
    $(document).ready(function(){
    $("#hahabtn").click(function(){ 
           alert('dfdsf');
       $.ajax({
      url : '../photo/addAblum.do',
            type : "POST" ,
            dataType:'json',
           
            data : $("#hahaform1").serialize(),
            success : function(data){
            alert(data);
            }
            });
    });
    无法进入后台程序
  2. A
    Ajax提交,和bootstrap没半点关系。

JQUERY ajax提交数据到后台,进行数据库查询,然后重新绑定GridView.

  1. Q
    我在前台放了一个input,type=button,点击后触发下面的ajax提交数据到后台。后台处理后对一个GridView进行数据绑定。
    前台代码如下:
    params = JSON.stringify(obj);
                $.ajax({
                    type: "Post",
                    url: "/aspx_consumption/Consumption_Home.aspx/AdvanceSearch",
                    data: params,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        alert(date);
                    },
                    error: function (err) {
                        alert(err);
                    }
                });
    后台也没问题:
     [WebMethod]
            public static DataSet AdvanceSearch(string Factory_Style_No, string Customer_Style_No, string Style_Type, string Writer, string Start, string End, string pageSize, string pageIndex)
            {
                DataSet ds = new DataSet();
                string connStr = @System.Configuration.ConfigurationManager.ConnectionStrings["Sample_Room_ProgressConnectionString"].ToString();
                SqlConnection conn = new SqlConnection(connStr);
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                //cmd.CommandText = "SELECT Consumption_ID,Consumption_Factory_Style_No,Customer_Style_No,Quantity,Writer,Sample_Type,Write_Date,Confirmation,Approval FROM [Sample_Room_Progress].[dbo].[Consumption] where Factory_Style_No like '%'[email protected]_Style_No+'%' AND Customer_Style_No like '%'[email protected]_Style_No+'%' AND Sample_Type like '%'[email protected]_Type+'%' AND Writer like '%'[email protected]+'%' BETWEEN Write_Date >[email protected] AND Write_Date<[email protected] order by Write_Date DESC";
                cmd.CommandText = "SELECT Consumption_ID,Consumption_Factory_Style_No,Customer_Style_No,Quantity,Writer,Sample_Type,Write_Date,Confirmation,Approval FROM [Sample_Room_Progress].[dbo].[Consumption] where Factory_Style_No like '%'[email protected]_Style_No+'%' AND Customer_Style_No like '%'[email protected]_Style_No+'%' AND Sample_Type like '%'[email protected]_Type+'%' AND Writer like '%'[email protected]+'%' AND Write_Date between @Start and @End  order by Write_Date DESC";
                cmd.Parameters.Add("@Factory_Style_No", SqlDbType.NVarChar);
                cmd.Parameters["@Factory_Style_No"].Value = Factory_Style_No;
                cmd.Parameters.Add("@Customer_Style_No", SqlDbType.NVarChar);
                cmd.Parameters["@Customer_Style_No"].Value = Customer_Style_No;
                cmd.Parameters.Add("@Sample_Type", SqlDbType.NVarChar);
                cmd.Parameters["@Sample_Type"].Value = Style_Type;
                cmd.Parameters.Add("@Writer", SqlDbType.NVarChar);
                cmd.Parameters["@Writer"].Value =Writer;
                cmd.Parameters.Add("@Start", SqlDbType.DateTime);
                if (Start == "")
                {
                    cmd.Parameters["@Start"].Value = DBNull.Value;
                }
                else
                {
                    cmd.Parameters["@Start"].Value = Start;
                }

                cmd.Parameters.Add("@End", SqlDbType.DateTime);
                if (End == "")
                {
                    cmd.Parameters["@End"].Value = DBNull.Value;
                }
                else
                {
                    cmd.Parameters["@End"].Value = End;
                }           
                SqlDataAdapter ad = new SqlDataAdapter();
                ad.SelectCommand = cmd;
                int indexNum = Convert.ToInt32(pageIndex);
                int SizeNum = Convert.ToInt32(pageSize);
                ad.Fill(ds, indexNum, SizeNum, "Consumption");
                return ds;
            }
    但是用Jquery ajax提交数据,后台必需要静态方法似乎没法操作ASP.NET控件。有什么办法可以解决?难道我只能用asp.net控件吗?
  2. A
    可以使用jquery easyui datagrid , 有完整的代码可以参考。

jquery ajax方法调用在session超时以后如何跳转到登录页面?

  1. Q
    jquery ajax方法调用在session超时以后如何跳转到登录页面?

    session超时以后虽然被过滤器过滤到了,但是并不会跳转到登录页面请求具体的解决方法。

    我参考了这篇文章,但是我调用ajaxStart不起作用。

    http://www.blogjava.net/vickzhu/archive/2009/06/05/280223.html

    ext jquery 用户访问超时(ext session过期)

    解决两种情况下的用户访问超时。
    a)普通http请求的session超时。
    b)异步http请求的session超时,使用ext后大部分的界面刷新都是异步的ajax请求。

    不管是那种类型的http请求总是可以由一个过滤器来捕捉。
    分类:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
    其实对于常见的ajax框架,header中还有标示自己身份的header信息。

    对于普通的http请求,发现session超时后直接重定向到一个超时页面,显示访问超时。
    对于异步http请求,发现session超时后则向请求的response中写入特定的超时头信息,客户端ajax对象检测
    头信息,发现有超时状态标志后调用显示超时信息的javascript方法,提示用户访问超时。

    服务器端session超时后在过滤器中为response添加新的头信息,标记该请求超时:

    if(r.getHeader("x-requested-with")!=null
    && r.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
    response.setHeader("sessionstatus","timeout");
    }
    使用Ext.Ajaxt对象完成异步请求的交互,Ext.Ajax是单实例对象(非常重要,全局单一Ext.Ajax实例!)。
    注册Ext.Ajax的requestcomplete事件,每个ajax请求成功后首先响应该事件。在该事件的回调函数里面判断
    访问请求是否超时。使用Ext.Ajax对象的好处是,只需要引入一个包含了几行超时处理代码的js文件,就可以
    为当前应用增加超时处理功能,原有代码不需要做任何修改。


    使用Ext.Ajaxt对象完成异步请求交互,假如checkUserSessionStatus是你的回调方法,每个页面引用:

    Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
    function checkUserSessionStatus(conn,response,options){
    //Ext重新封装了response对象
    if(typeof response.getResponseHeader.sessionstatus != 'undefined'){
    //发现请求超时,退出处理代码...
    }
    }
    可以利用的几个特性:a)所有的ajax请求均带有x-requested-with:XMLHttpRequest头信息b)Ext.Ajax是单实例对象(非常重要,全局单一Ext.Ajax实例!)c)注册Ext.Ajax的requestcomplete事件,每个ajax请求成功后首先响应该事件(概念类似spring的aop拦截)。
    jquery提供了几个全局事件可以用来处理session过期请求,如当ajax请求开始时会触发ajaxStart()方法的回调函数;当ajax请求结束时,会触发ajaxStop()方法的回调函数。这些方法都是全局的方法,因此无论创建它们的代码位于何处,只要有ajax请求发生时,都会触发它们。类似的事件还有:ajaxComplete(),ajaxError(),ajaxSend(),ajaxSuccess()等。
    如果使某个ajax请求不受全局方法的影响,那么可以在使用$.ajax()方法时,将参数中的global设置为false,jquery代码如下:$.ajax({    url:"test.html",    global:false//不触发全局ajax事件})
    对于其他的ajax框架,解决用户访问请求超时这个问题的思路是类似的。


    问题补充:myali88 写道这篇文章讲的方法可行啦,是不是作者自己的代码有问题?

    java代码:

    当用户session过期时:

    if(request.getHeader("x-requested-with")!=null
    &&request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
    PrintWriter printWriter = response.getWriter();
    printWriter.print("{sessionState:0}");
    printWriter.flush();
    printWriter.close();
    }

    js部分的代码:

    /**
    设置jquery的ajax全局请求参数
    */
      $.ajaxSetup({
             contentType:"application/x-www-form-urlencoded;charset=utf-8",
             timeout:5,
             cache:false,
             complete:function(XMLHttpRequest,textStatus){
            var resText=XMLHttpRequest.responseText;
            if(resText!=null&&resText!=""){
            var res=eval("(" + resText + ")");
            if(res.sessionState==0){
         window.open(jsContextPath+'/login.jsp','_top');

            }
           
           
            }
         }
      });

    但是这样在session未过期的时候,ajax请求会导致一些错误。

    我究竟应该用jquery的哪个方法呢?
    问题补充:myali88 写道引用但是这样在session未过期的时候,ajax请求会导致一些错误。
    导致的错误是什么?


    找到错误了,这句代码出错了
    var res=eval("(" + resText + ")");
    因为项目中使用了easyui,有些页面是easyui调用的,整个页面也认为是一个ajax请求了,但是整个页面并不是 json格式。



    $.ajaxSetup({
             contentType:"application/x-www-form-urlencoded;charset=utf-8",
             timeout:pageTimeout,
             cache:false
             ,
             complete:function(XHR,TS){
            var resText=XHR.responseText;
            if(resText=="{sessionState:0}"){
            var nav=judgeNavigator();
         if(nav.indexOf("IE:6")>-1){
       window.opener=null;
       window.close();
       window.open(jsContextPath+'/login.jsp','');
    }else{
    window.open(jsContextPath+'/login.jsp','_top');
    }
            }
         }
      });
           

    这样就搞定了。

    谢谢啦
  2. A
    引用但是这样在session未过期的时候,ajax请求会导致一些错误。
    导致的错误是什么?

jquery1.4.4 ajax json 在struts2.2.1中没法封装对象,求解脱

  1. Q
    才学着用jquery的ajax,用json封装对象在action中找不到,求大神帮看下:
    js:


    @SuppressWarnings("serial")
    public class CdnServMethodAct extends JeeCoreAction
    {
    	protected static Logger logger = LoggerFactory.getLogger(CdnServerAct.class);
    	
    	private Soms4CdnAccessMethods methods;
    	private List<String> idList;
    	private String ids;
    	private String message;
    
    	public String  delServerMethod(){
    		String id = idList.get(0);//methods.getMethodId();
    		System.out.println("get Method Id from ajax json:"+id);
    		this.setMessage("success");
    		System.out.println("json return =="+this.getMessage());
    		idList = new ArrayList<String>();
    		idList.add("1");
    		idList.add("2");
    		return "del_success";
    	}
    	
    	public String  editServerMethod(){
    		String id = idList.get(0);//methods.getMethodId();
    		System.out.println("get Method Id from ajax json:"+id);
    		this.setMessage("success");
    		System.out.println("json return =="+this.getMessage());
    		idList = new ArrayList<String>();
    		idList.add("1");
    		idList.add("2");
    		methods.setMethodId(5);
    		methods.setMethodName("test");
    		return "edit_success";
    	}
    	
    	public Soms4CdnAccessMethods getMethods()
    	{
    		return methods;
    	}
    
    	public void setMethods(Soms4CdnAccessMethods methods)
    	{
    		System.out.println("进来了,我是JSON...............");
    		System.out.println("Soms4CdnAccessMethods...............");
    		System.out.println("methods.name="+methods.getMethodName());
    		this.methods = methods;
    	}
    	
    	public List<String> getIdList()
    	{
    		return idList;
    	}
    
    	public void setIdList(List<String> idList)
    	{
    		System.out.println("进来了,我是JSON...............");
    		System.out.println("list长度==="+idList.size());
    		System.out.println("idList[0]="+idList.get(0));
    		this.idList = idList;
    	}
    //setter or getter 
    


    死活出不来

    这个包:
    commons-collections-3.2.jar
    commons-lang-2.3.jar
    commons-logging-1.0.4.jar
    ezmorph-1.0.3.jar
    json-lib-2.1-jdk15.jar
    struts2-json-plugin-2.2.1.jar

    2010-12-30 10:51 WARN  c.j.c.h.HibernateSessionFilter - HibernateSessionFilter begin doChain
    进来了,我是JSON...............
    Soms4CdnAccessMethods...............
    methods.name=null
    


    证明是能进action的  但前面ajax总是error
    data用para也能进action,但idList总是第一个有值
    2010-12-30 10:56 WARN  c.j.c.h.HibernateSessionFilter - HibernateSessionFilter begin doChain
    进来了,我是JSON...............
    list长度===1
    idList[0]=["0","5"]
    get Method Id from ajax json:["0","5"]
    json return ==success
    


    这是怎么回事?
    向各位大神求教..
    急 急  急  
    问题补充:zhanjia 写道Struts2.1.6默认没支持
    <result name="edit_success" type="json">
    可的result类型json
    2.2.1支持吗?
    我执行delSerMethod时,返回的message在jquery中能取到,就是用json取的
    所以我觉得我配置文件的result返回的type=“json”应该没问题
    主要问题是  我现在用的$.ajax()的这个方法,因为我要用到error
    今天弄了好久的包   json包不同版本会和struts2.2不兼容
    所以我把导的包也发出来了 
    jquery1.4.*的json会严格定义  都是双引号

    这么晚了 谢谢你~
    问题补充:andy_javahome 写道实在不行就这么写
    var para1 = "methods.methodId=5&methods.methodName=1";  
    应该没问题


    andy_javahome 写道实在不行就这么写
    配置似乎没问题,你试试将
    <param name="includeProperties">methods\.*</param>
    中的methods\.*配置为methods\.属性1,methods\.属性2
    试试


    试了 不行
    我工程的java规范是5.0的,和这个会不会有关系....
    我上网查了下,jquery的ajax封装的List型的json对象就是这么写的
    我action中list接的也是字符串


    问题补充:andy_javahome 写道var para1 = {"methods.methodId":"5","methods.methodName":"1"};这种传参方式是无法传对象过去的,跟你配置和用什么技术没啥关系,我是没传成功过,起码我常用的jQuery的高级封装方法$.get 和$.post 是没成功过。
    我的方法怎么会不行呢 ,不可能的事儿呀jquery1.4.4 ajax json 在struts2.2.1中没法封装对象,求解脱
    。我们经常用这个种方式啊  data :"methods.methodId=5&methods.methodName=1";  
    你仔细检查一下,我用那种方法写从来都是可以的。
    我还有一种本方法,这个是当你需要穿多个参数的时候用的,
    将你的参数放到input里 用form包起来 如:<form id="myform"><input name="methods.methodId" value="2" type="hidden"/></form>
    你的js参数改成 data : $('#myform).serialize(),

    你用第一种方法的时候dataType是什么类型的?
    我的json类型,按data :"methods.methodId=5&methods.methodName=1"; 提交js直接抛异常了

    第二种隐藏表单域我再试试...
    3q..
  2. A
    var para1 = {"methods.methodId":"5","methods.methodName":"1"};这种传参方式是无法传对象过去的,跟你配置和用什么技术没啥关系,我是没传成功过,起码我常用的jQuery的高级封装方法$.get 和$.post 是没成功过。
    我的方法怎么会不行呢 ,不可能的事儿呀jquery1.4.4 ajax json 在struts2.2.1中没法封装对象,求解脱
    。我们经常用这个种方式啊  data :"methods.methodId=5&methods.methodName=1";  
    你仔细检查一下,我用那种方法写从来都是可以的。
    我还有一种本方法,这个是当你需要穿多个参数的时候用的,
    将你的参数放到input里 用form包起来 如:<form id="myform"><input name="methods.methodId" value="2" type="hidden"/></form>
    你的js参数改成 data : $('#myform).serialize(),

jQuery Ajax timeout 處理

  1. Q
    請教能人前輩

    jquery ajax 如果獲取timeout 并進行處理的?

    需求是:當此ajax  timeout時可執行我方法  fn a()

             $.ajax({
                type: "post",
                async:false,
                dataType: "json",
                url: "ashx/Main.ashx",
                cache: false,
                success: function(result)
                {
                 
                },
                error: ajaxError
            });
  2. A
    对jQuery来说,超时可以直接设置timeout参数,并在error事件中捕获第二个参数,如果是“timeout”则表明捕获了超时事件,非常清楚。
    要设置请求超时可以用全局属性$.ajaxSetup({timeout:5000});

    例子:

    $.ajax({        type: "POST",        contentType: "application/json",        url: "../ws/MyService.asmx/test",        data: '{"email":"'+email+'"}',         timeout: 30000, //超时时间:30秒
            dataType: 'json',        error: function(XMLHttpRequest, textStatus, errorThrown){        //TODO: 处理status, http status code,超时 408
            // 注意:如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能
                  //是"timeout", "error", "notmodified" 和 "parsererror"。
            },
            success: function(result) {          // TODO: check result
            }
    });
    参考的这个http://www.cnblogs.com/Mainz/archive/2009/09/14/1566494.html     

jquery ajax 問題請教!!求教!!

  1. Q
      在使用JQUERY AJAX中,有個菜鳥問題請教,
     
      忘各位高手,前輩不吝賜教!

      感謝為先!

     
      使用AJAX POST到後來後

      返回JSON數據,而我每次需要使用這個JSON數據都需要定義全局變量來使用,不能使用直接返回結果,是寫法問題,還是有其他方

      法?

      代碼:

     
      var dataJson;
      function bind()
      {
       $.ajax({
            
            type: "post",
            dataType: "json",
            url: "ashx/Main.ashx",
            data: "&Condition="+p_Condition+"&MothodName=GetApplyData",               
            complete :function(){},   
            error: function(){},    
           success: function(result) 
            {      
               dataJson = result;           
           }
        }); 
      }  
    
      function UseData()
      {
    
    [b]      目前是定義全局變量 dataJson 來接受返回值
    
           先執行 方法 bind();
          
          再使用 dataJson   [/b]
    
          我想變成 
    
           var dataJson = bind();
    
          缺不行
       }
      
  2. A
    因为ajax请求是异步的,因为你的程序需要依赖ajax请求返回的数据,所以需要等待ajax返回后再继续执行.

    所以要么改变设置使用同步的ajax请求,要么把你依赖ajax返回数据的程序放在回调函数里.

AJAX JSON 乱码

  1. Q
    网上下了一个JS、功能是把FORM里的内容序列化为JSON、用AJAX方式提交到后台
    JS比较小巧
    (function ($) {
        var formJson = {};
        var currentForm = null;

        $.fn.form_serialize = function () {
            currentForm = $(this);
            formJson = {};
            var doms = currentForm.find('[name]');
            $.each(doms, function (index, dom) {
                var domName = $(dom).attr('name');
                if (!formJson[domName]) {
                    formJson[domName] = { Name: domName, Type: $(dom).attr('type'), Doms: currentForm.find('[name=' + domName + ']') };
                }
            });
            return getResult();
        };

        var getResult = function () {
            var d = {
                toJson: function () {
                    var data = {};
                    $.each(formJson, function (key, json) {
                        data[key] = getVal(json);
                    });
                    return data;
                },
            };
            return d.toJson();
        }

        var getVal = function (json) {
            var methods = {
                getDefaultVal: function (dom) {
                    return $(dom).val();
                },
                getSelectVal: function (dom) {
                    var val = '';
                    var selectType = $(dom).attr('type');
                    if (selectType == 'select-multiple') {
                        var items = $(dom).val();
                        if (items == null) return '';
                        for (var i = 0; i < items.length; i++) {
                            val += i == 0 ? items[i] : (',' + items[i]);
                        }
                        return val;
                    } else {
                        return $(dom).val();
                    }
                },
                getRadioVal: function (dom) {
                    return $(dom).attr('checked') ? $(dom).val() : null;
                },
                getCheckBoxVal: function (dom) {
                    return methods.getRadioVal(dom);
                }
            };

            var dispacher = function (type, dom) {
                switch (type) {
                    case 'text':
                    case 'password':
                    case 'hidden':
                    case 'textarea':
                        return methods.getDefaultVal(dom);
                    case 'select-one':
                    case 'select-multiple':
                        return methods.getSelectVal(dom);
                    case 'radio':
                        return methods.getRadioVal(dom);
                    case 'checkbox':
                        return methods.getCheckBoxVal(dom);
                    default:
                        return '';
                }
            };

            var domType = json.Type;
            var doms = $(json.Doms);
            var count = doms.length;
            if (count > 1) {
                var val = '';
                var index = 0;
                for (var i = 0; i < count; i++) {
                    var v = dispacher(domType, doms.eq(i));
                    if (v == '' || v == null || v == undefined)
                        continue;
                    val += index++ == 0 ? dispacher(domType, doms.eq(i)) : (',' + dispacher(domType, doms.eq(i)));
                }
                return val;
            } else {
                return dispacher(domType, doms);
            }
        };
    })(jQuery);
    AJAX调用为:
    var formjson=$("#main").form_serialize();
    $.getJSON(actionnm,formjson, function(data)
    到后台后FORM中输入的中文就乱码了
    JSP、ACTION应该没问题、因为我改为FORM的SUBMIT提交就没问题
    JS中的这段我改了一下
      getDefaultVal: function (dom) {
       eturn encodeURI(encodeURI($(dom).val()));
       },
    还是乱码
    不知应怎么改?
    应改不是那段JS的问题
    我改成
    var formjson={"wfclient.cname":"字字"};
    $.getJSON(actionnm,formjson, function(data)
    也不行
    问题补充:解决了、但是不爽
    1  var methods = {
       getDefaultVal: function (dom) {
        return encodeURI($(dom).val()、"UTF-8");
    },
    2 在BEAN的SET方法上改为
    public void setCname(String cname){
       try {
         this.cname = URLDecoder.decode(cname,"UTF-8");
       } catch (UnsupportedEncodingException e) {
         this.cname=cname;
       }
    }
    凡是有中文的BEAN属性的SET方法都要改
    感觉很不爽
    有没有更好的方法
    或能提交JSON的其他AJAX命令
    问题补充:wangqj 写道你这种方法,是先编码,再解码的方式

    还是我说的那个方法,你找到jQuery发送请求的那个函数,
    $.ajax 这个函数里面有个参数,你可以找一下
    那个参数啊?
    网上查、书上查也没发现哪个参数象?
    问题补充:lanrenjun 写道ajax用post的方式提交 可以避免上述问题
    谢谢
  2. A
    ajax用post的方式提交 可以避免上述问题