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

时间: 2024-11-09 00:38:46

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

jquery ajax参数加点号状态200进error

今天开发中遇到一个很恶心的问题: 用jquery中的ajax提交,发现如果参数中有点号的参数,后台正常返回200状态码的情况下也会走到error:function. 1. 参数data: "topicAbstractInfoVO.belongSubjectId="+subjectId 2. 参数data:"belongSubjectId="+subjectId, 请求正常返回,状态为200.第一种情况,跳到了error处理块,第二种情况跳到success处理块. a

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

最近几天一直都在解决error问题,周末都没能好好过,悲痛万分,想逃走??..... 一.悲痛的开端 项目用jQuery的ajax方法请求php后台,前台代码写的没有问题,后台返回的json数据大概也是对的(猜的,后来验证了json是对的),然后悲剧就如约而至: 先看核心代码: $.ajax({ type:"POST", url:"{:U('City/adds')}", data:{}, dataType: 'json', success:function(data

mvc jquery ajax传递数组null问题

mvc jquery ajax传递数,  areaIds是个int数组.后台action用list<int>接收.当我想传空值时,先用null传递,结果action收到的AreaIds竟然含有一个元素0,非常诡异,有空再查找具体原来.后来想传空时不再用Null,改成[],这样就ok了.很奇怪 function refreshStoreHouseDatas(marketId,areaIds,selectedValues) { var data = { marketId: marketId, ar

jquery ajax 12030,12031,200 等错误

jquery  ajax  12030,12031,200 等错误 原因1:jquery 支持中文不好,aspx称号.文件夹.项目名都不能为中文,否则会报以上错误! 原因2:aspx页面文件及aspx.cs等涉及文件编码不一或全是中文编码,将编码全改成utf-8和全以utf-8保存则可解决! 原因3:服务器因为某些原因重置或终止了当前连接,jquery ajax中修改async为false同步状态或type为get或去除data参数将其加入url参数则可解决!

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

今天在使用jquery.ajax方法去调用后台方法时,ajax中得参数data类型是"JSON",后台DEBUG调试,运行正常,返回正常的结果集,但是前端一直都进到ajax的error方法,百思不得其解,后要一探究竟,在error方法的参数中加了data后,发现data中的readyState = 4 并且 status=200,这两个状态也证明ajax访问没有问题,没有出现异常.回过头发现我在后台返回的是字符串,但并不是标准的json格式的字符串,所以前端js进入不了success.

微信公众号开发系列-微信企业号开发相关參数

微信企业号出来之后,本人也抱着前面开发订阅号和服务号的经验来探究了一番,这里整理了下再开发企业号时候碰到的一些接口參数.企业号开发文档详见http://qydev.weixin.qq.com/wiki/index.php?title=首页 1.创建自己定义菜单參数解释: 菜单管理的创建操作.官方定义例如以下所看到的. 请求说明 Https请求方式: POST https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_T

Extjs4.2 ajax请求url中传中文參数乱码问题

今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: Ext.Ajax.request({ url:"updateadminuser.do?"+userid+"&uname="+encodeURI(encodeURI(uname)), success:function (response) { store.load

宏定义之二(连接符,可变參数,文件名称,行号,函数名)

宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等 转自 http://blog.csdn.net/yiya1989/article/details/7849588 先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个样例,会用到上面这些宏: [cpp] view plaincopy #define myprintf(...) printk("[lch]:F

【Jquery】jQuery获取URL參数的两种方法

jQuery获取URL參数的关键是获取到URL,然后对URL进行过滤处理,取出參数. location.href是取得URL.location.search是取得URL"?"之后的字符串,也就是说參数部分. 方法一: function request(paras){ var url = location.href; var paraString = url.substring(url.indexOf("?")+1,url.length).split("&a