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

用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的类型和返回的类型不一致。

jquery ajax參数加点号状态200进error的更多相关文章

  1. jQuery ajax请求错误返回status 0和错误error的问题

    上周发现一个jQuery ajax请求错误返回status 0和错误error的问题,responseText是"error",状态码是0而不是200: $.ajax({ type ...

  2. jQuery Ajax传递数组到asp.net web api参数为空

    前端: var files = []; files.push({ FileName: "1.jgp", Extension: ".jgp", FileType: ...

  3. jQuery ajax 传递数组到struts2

    使用jQuery的$.ajax()方法进行异步交互时,如果传递的数据有数组(例如传输checkbox数据),Action中经常会接受不到数据. 此时应该注意一下data中数组的写法,例如: //组合成 ...

  4. 前台ajax请求php后台返回成功却进error方法解决

    最近几天一直都在解决error问题,周末都没能好好过,悲痛万分,想逃走

  5. mvc jquery ajax传递数组null问题

    mvc jquery ajax传递数,  areaIds是个int数组.后台action用list<int>接收.当我想传空值时,先用null传递,结果action收到的AreaIds竟然 ...

  6. jQuery.ajax()方法中參数具体解析

    前言 在项目开发中,为了实现异步向服务端发起请求,最常常使用的就是jQuery.ajax方法了.刚開始需求比較简单,调用jQuery.ajax方法时要传的參数也就那几个常见的參数:url/data/d ...

  7. jQuery(expression, [context]) , $(即jQuery)的參数问题

    jQuery(expression, [context])         返回值:jQuery 概述 这个函数接收一个包括 CSS 选择器的字符串,然后用这个字符串去匹配一组元素. jQuery 的 ...

  8. jQuery UI dialog 參数说明

    前段时间碰到个问题 jquery UI dialog弹出层 弹出多个层是 比方弹出两个层A和B  B层假设显示的数据表格太大,伸到了A层的外面,那伸到A层之外的部分就看不到了,由于B层是在A层上弹出的 ...

  9. 【转】jQuery 的 ajax 方法,返回结果 readyState=4 并且 status=200 时,还进 error 方法

    今天在使用jquery.ajax方法去调用后台方法时,ajax中得参数data类型是"JSON",后台DEBUG调试,运行正常,返回正常的结果集,但是前端一直都进到ajax的err ...

随机推荐

  1. 普通spring jsp+mybatis项目修改为springboot + jsp +mybatis项目

    概述 由于公司决定使用spring cloud,但是公司积累了大量的普通的jsp项目,老的项目直接全部修改为springboot成本过高,周期比较长,而且公司业务正在快速拓展,所以需要把之前的老项目修 ...

  2. 【TP3.2】跨库操作和跨域操作

    一.跨库操作:(同一服务器,不同的数据库) 假设UserModel对应的数据表在数据库user下面,而InfoModel对应的数据表在数据库info下面,那么我们只需要进行下面的设置即可. class ...

  3. JavaScript-各种插件

    上传插件: 首推:uploadify http://www.admin10000.com/document/2980.html 滚动条插件: http://www.admin10000.com/doc ...

  4. JDK 生成数字证书

    JDK(keytool.exe)生成数字证书 2010-11-21 15:52 QUOTE: keytool JAVA是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数 ...

  5. CocoaPods的ruby问题 Error fetching http://ruby.taobao.org/:

    今天安装了一个CocoaPods,在安装淘宝ruby是遇到了问题 bogon:~ zhch$ gem sources -a http://ruby.taobao.org/ Error fetching ...

  6. 基于node.js的web框架express

    1.安装node.js方法: window :https://nodejs.org/en/ linux:http://www.runoob.com/nodejs/nodejs-install-setu ...

  7. Android开发学习之SQLite数据存取浅析

    一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低 ...

  8. RHCE7 管理II-3使用VIM编辑器

    vim的不同版本: 1.vim-minial 提供vi和相关命令.在RHEL 7的最小安装中 2.vim-enhanced 提供vim命令.提供语法突出显示.文件类型插件和拼写检查等功能 3.vim- ...

  9. mysql InnoDB 的行锁

    表的引擎类型必须为InnoDB才可以进行此操作. 相关链接:http://www.cnblogs.com/CyLee/p/5579672.html 共享锁:单独运行前两句,然后新建一个会话使用第三句. ...

  10. 分享六:php脚本守护进程

    http://www.baidufe.com/item/9565cec0004cb49d25fd.html