有关JQuery版本中ajax于数据封装的问题

环境太长了,没法放在标题里,就写在文章头部吧:

环境是:服务器:Windows Server°2012 R2 Standard;

               tomcat7;

              jquery-1.9.1;

              页面用的是jsp
              后台返回调用@ResponseBody

昨天晚上,项目快上线额前夕,突然间服务器上的整个系统的数据提交回传出了大问题,测试的时候,不论回传的数据是什么,都提示传的数据不合法。但本地调试一点问题都没有。
整个人都慌了。打电话问前端(其实他也只是做了数据回传的一小部分,因为一个:这方面我不太懂,二个:当初说项目要一个月上线(其实可能都没一个月),然后前3-4天,那边还在提新需求。疲于奔命;系统大部分都还算是我一个人搭建的),他说怀疑是我接口写错了。我说不可能,本地调试一点问题都没有,没理由上了服务器接口就不适配了吧。

问过机构老师(没错就是半路出家的,所以可能术语没那么专业,但我会尽量把我的场景复述清楚的),老师建议用eclipse远程调试,这玩意我试了下,按网上的教程配好(可能是自以为的),但第一次尝试就报了:Failed to connect to remote VM。Connection timed out...巴拉巴拉的问题。然后果断就放弃了,因为似乎没剩多少时间给我去研究这玩意怎么用的。

我感觉是前端的数据回传问题,但我对于前端确实是半懂不懂的,叫我拼凑出一个页面还好说(也只能保证不丑,性能就不敢保证了),要真去排查前端问题,想想都觉得可怕。但没法,第二天就要上线了,也只能自己撸着袖子干了,大不了就通宵嘛.....尽职就好了....(虽然我不知道,就算我通宵能不能解决问题)好了,前戏做了那么多,主要是那个情况真的是太恐怖了,未知的情况下只能靠自己,所以只是单纯想说说,宣泄一下。接下来就上整个流程吧。

首先,出现问题主要是在ajax方法与后端交互的过程,代码如下:

         $.ajax({
	                    type : "post",
	                    url : "/GC_HR/test/phoneSave",
	                    data : {
	                        json : json
	                    },
 	                    dataType : "JSON", /**/
	                    heads : {
	                        'content-type' : 'application/x-www-form-urlencoded'
	                    },
	                    success : function(data, textStatus) {
	                    	if (textStatus == "success") {
	                    	   window.location.href =         "${pageContext.request.contextPath}/test/${tableId}/success";
	                        } else {
	                            if (data.errorType == "test/error") {
	                                showAlertMsg("提示", "出错了", "warning");
	                            }
	                        }
	                    },
	                    error : function(XMLHttpRequest, textStatus,
	                            errorThrown) {
	                        alert("错误");
	                    }
	                });

 

其中data:{json:json},后面那个json是我在前面用JSON.stringify()封装好的数据。

后台接收的类,头部长得是这样的,实现代码就不贴了,因为和这个问题没多大关系;而且为了避嫌,也不好贴太全,代码如下:

  @RequestMapping(value="/phoneSave", method=RequestMethod.POST)
    public @ResponseBody String phonSubmit(
          @RequestParam Map<String,Object> param
    ){

        //前端传来的是一个key-value形式的数据,可以用param.get(/**your key**/);来获取
       //从param获取参数,实现逻辑
}

然后,就是问题啦:

在按钮事件触发function时,直接跳到了上面ajax代码的下述代码中:

 error : function(XMLHttpRequest, textStatus,
	                            errorThrown) {
	                        alert("error message");
	                    }

这是什么玩意?似乎也不是我写的,打个电话去问了下写这个的人,因为他没在电脑前,可能也无法准确知道错误信息....所以还是我搞吧。

定了定神,看了下,既然跳到这个方法里了,而这个方法又有入参,就

                         consloe.log();

在控制台打印出来吧,我写了个log,如下:

                         console.log(textStatus);

 

返回了个值:

                          parsererror

懵,去百度了下:

有幸看到小哥的博客:https://blog.csdn.net/AinGates/article/details/75250223

然后偷偷又多加了两个log:

                         console.log(XMLHttpRequest.status);

                         console.log(XMLHttpRequest.readyState);

返回的是两个值:200,4

以鄙人浅薄的知识,大概了解,这是没问题啊。

再看了下小哥的博客,还有一些类似的博客,好像都是指向:JQuery1.4版本以后,对回传的dataType:"json",有着严格的定义。

后来,一篇文章指引了我人生的方向:注释掉dataType:"json",就OK了,那玩意还能注释掉....
试了下。果然不跳到error的方法里了。但不知道注释掉了以后会不会留下什么隐患。

但很抱歉,似乎找不到最后一篇文章的小哥的博客地址了.....感觉有点对不起小哥,啥时候看到了会补上的....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值