• jquery ajax參数加点号状态200进error


    今天开发中遇到一个非常恶心的问题:

    用jquery中的ajax提交。发现假设參数中有点号的參数。后台正常返回200状态码的情况下也会走到error:function。

    1. 參数data: "topicAbstractInfoVO.belongSubjectId="+subjectId

    2. 參数data:“belongSubjectId="+subjectId,

    请求正常返回,状态为200。

    第一种情况,跳到了error处理块。另外一种情况跳到success处理块。

    ajax请求代码例如以下:

    $.ajax({
     url: "/topic/saveMarkDraft.action",
         dataType: "json",
     type: "POST",
         data: "topicAbstractInfoVO.belongSubjectId="+subjectId,
         async:true,
         success: function(msg){
         var a=2;
         var b=a;
         alert(b);
         alert(msg);
         },
         error:function(msg){
         var a=1;
         var b=a;
         if(msg.responseText=="saveMarkSuccess"){
         alert(b);
         }
         alert(msg);
         }
    });

    后台处理方法:

        public String addMarkDraft() {
            print("saveMarkSuccess");
            return "saveMarkSuccess";
        }

    排查问题:

    1. 之前有遇到过类似返回200时跳到error模块的情况。是由于dataType设置的为html,返回内容为json。类型不匹配也会导致这个问题。(今天的问题不是这个原因,排除)

    2. 前面另一个类似的方法也是返回json,js是一样的配置。是没有问题的;经过对照代码发现一个不同点,就是print()方法

    2.1 正确的方法是这样返回的

       public String addMarkDraft() {
            String te = JsonUtil.toJson("saveMarkSuccess");
            print(te);
            return "saveMarkSuccess";
        }

    改动方法有两种:

    1. 将ajax的dataType改为text

    2. 将后台返回的字符串"saveMarkSuccess"用json转下

    结论:

    因为返回的内容不是json格式,是string格式。根本问题还是因为js的类型和返回的类型不一致。

    总结:

    1.  尽管对于一个字符串,用json序列化后还是一个字符串,通过打印日志发现一个String的字符串用json序列化后没有什么变化。

    2.  实际上返回到前台的类型是不一样的。一个是纯文本,一个json格式。尽管看起来是一样的,实际上是不同的(因为String在java是一个对象,不是原生类型,所以用json处理后是有变化,详细变化没有时间细纠。先记住)。

    这一点一定要注意

    3.  假设ajax要求返回的是json串。无论后台的处理类型是什么,最好都通过json进行序列化一下,即便是普通类型



    结论:

    因为返回的内容不是json格式,是string格式。根本问题还是因为js的类型和返回的类型不一致。

  • 相关阅读:
    keras与卷积神经网络(CNN)实现识别mnist手写数字
    Pytorch自动求解梯度
    Kaggle竞赛入门(四):随机森林算法的Python实现
    Kaggle竞赛入门(三):用Python处理过拟合和欠拟合,得到最佳模型
    Kaggle竞赛入门(二):如何验证机器学习模型
    Kaggle竞赛入门(一):决策树算法的Python实现
    R语言入门:正态分布中dnorm(),pnorm(),qnorm(),和rnorm()函数的使用
    初识suse-Linux相关!
    关于visio 2007导入独立图库
    让windows 2003启动后直接进入桌面
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6708249.html
Copyright © 2020-2023  润新知