这是JS代码
var loading = new Loading();
var layer = new Layer();
$('Account').onclick = function(e){
var newProducts = products.map(function(arr){
return {'id':arr.id,'number':arr.num};
});
console.log(newProducts);
var ele = e.target;
layer.reset({
content:'确认购买吗?',
onconfirm:function(){
layer.hide();
loading.show();
var xhr = new XMLHttpRequest();
var data = JSON.stringify(newProducts);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
var status = xhr.status;
if(status >= 200 && status < 300 || status == 304){
var json = JSON.parse(xhr.responseText);
if(json && json.code == 200){
loading.result('购买成功',function(){location.href = './account.html';});
util.deleteCookie(name);
}else{
alert(json.message);
}
}else{
loading.result(message||'购买失败');
}
}
};
xhr.open('post','/api/buy');
xhr.setRequestHeader('Content-Type','application/json');
xhr.send(data);
}.bind(this)
}).show();
return;
};
@Controller
下面是java代码:
@RequestMapping(value = "/api")
public class BuyApiController {
@Autowired
TransactionService transactionServiceImpl;
@ResponseBody
@RequestMapping(value = "/buy",method= RequestMethod.POST,produces = MediaType.JSON)
public JsonResult api_buy(HttpSession httpSession,
@RequestParam("id") Long product_id)
{
System.out.println("Class BuyApiController Method api_buy");
System.out.println("[product_id]:" + product_id);
//session
System.out.println("[session.id]:" + httpSession.getId());
UserVO userVO = (UserVO) httpSession.getAttribute("user");
JsonResult jsonResult = new JsonResult();
if(product_id == null)
{
//请求参数有错误 http status code is 400
jsonResult.setCode("400");
jsonResult.setMessage("购买失败");
jsonResult.setResult(false);
}
else
{
if(userVO == null)
{
//401 Unauthorized当前请求需要验证
jsonResult.setCode("401");
jsonResult.setMessage("购买失败");
jsonResult.setResult(false);
}
else if(userVO.getUsertype() == 0)
{
//buy
try {
this.transactionServiceImpl.buy(userVO, product_id);
jsonResult.setCode("200");
jsonResult.setMessage("购买成功");
jsonResult.setResult(true);
}
catch (Exception e)
{
System.out.println("[Exception]:" + e.toString());
jsonResult.setCode("400");
jsonResult.setMessage("购买失败");
jsonResult.setResult(false);
}
}
else if(userVO.getUsertype() == 1)
{
//403 Forbidden,当卖家点击进入购买时,则发生没有权限,导致操作拒绝
jsonResult.setCode("403");
jsonResult.setMessage("购买失败");
jsonResult.setResult(false);
}
else
{
//403 Forbidden未知身份发生购买,拒绝
jsonResult.setCode("403");
jsonResult.setMessage("购买失败");
jsonResult.setResult(false);
}
}
return jsonResult;
}
}
后台代码返回json数据没有接收到?
前端ftl:
这是前台ftl代码:
<#include "/include/footer.ftl">
这是前台ftl代码:
<#include "/include/footer.ftl">
这种问题,开firebug真的难找么?看一下请求是否完整,客户端返回数据都可以看到,response有数据就打js断点,response没数据就后台接口打断点,多简单的事情,又不是多莫名其妙的bug
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var status = xhr.status;
if (status ==200) {//直接判断200状态就行了
var json = JSON.parse(xhr.responseText);
if (json && json.code == 200) {
loading.result('购买成功', function () { location.href = './account.html'; });
util.deleteCookie(name);
} else {
alert(json.message);
}
} else {//不是200看服务器端返回什么内容
alert(xhr.responseText)
//loading.result(message || '购买失败');
}
}
};
这样判断 ,必须要加括号 if((status >= 200 && status < 300) || status == 304){}
var json = JSON.parse(xhr.responseText);这个之前打印下xhr.responseText