关于ajax返回数据不进success函数

 

很郁闷的一件事情,写了ajax函数

 $.ajax({
	  type: 'POST',
	  url: url,
	  success: function(data){
		  console.log("Data:------------------ "+data);
	      	  },
		  dataType: 'json'
	});

后台console不报错,前端浏览器数据传回了已经,

153017_gGPK_914393.png

前端不报错,但是总是不进success。Preview里面显示返回的是字符串不是json。

解决方案:

 1》到底进那里了,不成功则失败,进error看看

 $.ajax({
	  type: 'POST',
	  url: url,
	  success: function(data){
		  console.log("Data:------------------ "+data);
	      	  },
      error: function(msg){
		  console.log("msg:------------------ "+msg);
		  	  },
		  dataType: 'json'
	});
  

2》查看error中的msg

155001_N09X_914393.png

数据确实返回回来了,原因大概知道了,后台json构建失败,返回了responseText

3》此时,https://www.bejson.com/,把数据导入到此界面,结果特么校验正常。

如下原因会造成JSON校验失败,而且会让你不知道为什么失败

JSON字符串里的非数字型键值没有双引号
JSON中存在\t这样的制表符,看起来和空格一样,但是就是因为它的存在校验不通过。去掉就能过了。
编辑器有bom头也会造成

4》后端检验:

public static boolean isJson(String value) { 
		try { 
		new JSONObject(value); 
		} catch (JSONException e) { 
			e.printStackTrace();
		return false; 
		} 
		return true; 
		} 

失败了,哈哈哈,报错

org.json.JSONException: Unterminated string at 1247 [character 0 line 2]
	at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
	at org.json.JSONTokener.nextString(JSONTokener.java:260)
	at org.json.JSONTokener.nextValue(JSONTokener.java:360)
	at org.json.JSONArray.<init>(JSONArray.java:115)
	at org.json.JSONTokener.nextValue(JSONTokener.java:366)
	at org.json.JSONObject.<init>(JSONObject.java:214)
	at org.json.JSONObject.<init>(JSONObject.java:321)
	at cn.wawi.controller.mjl.HiddenTroubleController.isJson(HiddenTroubleController.java:689)
	at cn.wawi.controller.mjl.HiddenTroubleController.getDutyPersonStatistics(HiddenTroubleController.java:678)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:73)
	at cn.wawi.common.interceptor.GlobalInterceptor.intercept(GlobalInterceptor.java:47)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:67)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)
	at com.jfinal.ext.handler.ContextPathHandler.handle(ContextPathHandler.java:47)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1519)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1475)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

5》我特么实在不知道怎么搞这些脏数据了。

解决方案:(1)后端费力死,处理这些垃圾

                 (2)前端既然不报错,那就在error返回中处理这些垃圾,该处理处理。

 

其实第3》有问题,我处理了一个回车。这个情况就是String字符串太长的话就会自动换行。

String构建的字符串在1247会自动换行(没有实际测量看异常得知)。

转化json字符串的时候改方法,传入StringBuffer对象,异常解决。

 

其实,就是数据库里面有脏数据,有\n,去掉之后,世界忽然变的好顺畅。

 

 

转载于:https://my.oschina.net/gxs2012/blog/1552806

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值