ajax返回数据成功 却进入error方法

codeboom 2014-02-26 11:46:46
前端新手,多多关照。

服务端用的servlet3.0
package com.zy.test;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import org.json.JSONException;
import org.json.JSONObject;

@WebServlet(urlPatterns = "/modifyPass2")
public class Hehe extends HttpServlet {
public void service(HttpServletRequest request ,
HttpServletResponse response)
throws IOException , ServletException{

System.out.println(request.getParameter("resetKey"));
System.out.println(request.getParameter("password"));
System.out.println("hehe");
response.setContentType("text/html;charset=utf-8");
try {
JSONObject jsonObj = new JSONObject().put("result",true);
jsonObj.put("discribe","修改密码成功,你可以使用新密码登陆");
response.getWriter().print(jsonObj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}

}


服务端JSON数据是这样子的
{"result":true,"discribe":"修改密码成功,你可以使用新密码登陆"}

客户端代码:
jQuery.ajax({
url:'http://192.168.1.100:8080/hehe/modifyPass2',
//data:{resetKey:$.getUrlParam('resetKey'), password:$("#newpass").val()},
data:{resetKey:1, password:$("#newpass").val()},
type:'POST',
dataType:"json",
async: false,
success:function(data){
console.log(data);
$("#modifySuccess").css({'display':'inline'});
$("#modifySuccess").html(data.result);
},
error:function(){
alert("hehe");
}
});


现在的情况:浏览器中输入http://127.0.0.1:8080/hehe/modifyPass2
得到的是{"result":true,"discribe":"修改密码成功,你可以使用新密码登陆"}

客户端jquery调用,在firebug中看到的情况是,
若dataType:"json",则状态是200 OK,响应数据是空,调试的话,不执行success而是弹出hehe。
若dataType:"script",同样的则状态是200 OK,调试的话,不执行success而是弹出hehe,但是响应数据能看到是{"result":true,"discribe":"修改密码成功,你可以使用新密码登陆"}

查了资料,也改了服务端的response.setContentType("text/html;charset=utf-8");改成application/json什么的都试了。。客户端也组合着改。。问题还是这样子。请求成功返回200,就是不执行success。网上说这是因为json数据有问题。。我也看不出json数据有什么问题啊。
难道是servlet3.0的问题?
求拍砖,求回复。谢谢~
...全文
161385 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35766657 2016-11-22
  • 打赏
  • 举报
回复
楼主,解决了吗?求解
zhang7saber 2016-10-10
  • 打赏
  • 举报
回复
解决了么,有具体的方案么?
程序小童鞋 2016-07-15
  • 打赏
  • 举报
回复
楼主,我也遇到了同样的问题,已经解决了,问题不大,我这个原因是后台返回数据格式的问题,后台直接返回给我了字符串string,不符合jJSON数据的两种结构:1. “名称/值”对的集合2. 值的有序列表(数组)。你可以让后台看下他的返回格式是否未封装,希望对你有帮助
qq_34016767 2016-07-15
  • 打赏
  • 举报
回复
估计是配置文件,配置错了。
木头海上漂 2016-07-14
  • 打赏
  • 举报
回复
返回的数据类型和你设置的是否一致。。。参数类型是否和你实际的一致。。。
harrywater123 2016-07-13
  • 打赏
  • 举报
回复
我也遇到这个问题了,把type:json去掉就好了
执子守候 2016-07-12
  • 打赏
  • 举报
回复
开发突然遇到这个问题,有用。
  • 打赏
  • 举报
回复
应该是dataType的原因,dataType为json,但是返回的data不是json格式 于是将dataType:"json"去掉就ok了
songhuanle 2016-07-07
  • 打赏
  • 举报
回复
跨域的问题。。。。
zcc5211314 2016-05-07
  • 打赏
  • 举报
回复
或者是跨域,要用jsonp
zcc5211314 2016-05-07
  • 打赏
  • 举报
回复
额,就是因为用的是json但是返回值不是json格式的
wllper 2016-05-04
  • 打赏
  • 举报
回复
我开发微信也遇到这个问题: 本地调试 数据正常显示, 但放到外网,却不显示, 但是返回的数据格式都跟本地的一模一样. 却进入error . 200, 4, OK. 完全看不到到底哪里错误了. JS 却提示 parsererror 但我确认返回的数据格式是JSON 而且是严格格式的.本地测试没有任何问题.
qq_34712076 2016-04-19
  • 打赏
  • 举报
回复
这个解决了吗楼主
roffer 2015-03-09
  • 打赏
  • 举报
回复
dataType:"json", 改成 dataType:"text",
深蓝色的风 2015-03-09
  • 打赏
  • 举报
回复
async: false, 加个这个再试试
浮生若梦 2014-11-25
  • 打赏
  • 举报
回复
引用 6 楼 showbo 的回复:
url:'http://192.168.1.100:8080/hehe/modifyPass2', 跨域了吧,发起ajax请求的网站端口号是8080没有
有端口就跨域了啊?我记得好像以前加端口没啥问题啊
zlking02 2014-11-25
  • 打赏
  • 举报
回复
跨域了,鉴定完毕
念来过倒蛋笨 2014-11-24
  • 打赏
  • 举报
回复
我也遇到了这个问题 lz解决了么?
嘻哈大咖秀 2014-02-27
  • 打赏
  • 举报
回复
data返回的只是一个对象 还不是json 需要转换JSON.stringify(data)
codeboom 2014-02-27
  • 打赏
  • 举报
回复
说错了。。 若dataType:"script",同样的则状态是200 OK,调试的话,不执行success而是弹出hehe,但是响应数据能看到是{"result":true,"discribe":"修改密码成功,你可以使用新密码登陆"} 应该是:若dataType:"script",同样的则状态是200 OK,调试的话,执行success但是data是undefined,响应数据能看到是{"result":true,"discribe":"修改密码成功,你可以使用新密码登陆"}
加载更多回复(3)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧