spring返回数据使用ajax,【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中...

问题1:

使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中

问题展示:

45307c30b182dc2b64a69098edd5e024.png

问题解决:

最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法不认识最后返回的是给ajax的data,而是以为要去找这个页面所以并未找到!!

@RequestMapping("/queryAllDisease")

@ResponseBody

public PageInfo queryAllDisease(String productId, ModelMap model, int pageNo , int pageSize){

Product product =new Product();

product.setProductId(productId);

Criteria criteria = getCurrentSession().createCriteria(Disease.class);

criteria.add(Restrictions.eq("product", product));

return diseaseService.findQuery(criteria, pageNo, pageSize);

}

同样的,如果Controller中的方法执行完成之后  不想返回前台,就此打住,则也需要加上@ResponseBody

因为即使方法返回值为void

spring也会按照前台请求过来的页面地址去找,找不到就会如下:

4220834eb90a1ed0cf2182e956203042.png

所以,在后台:【以下的代码依旧是  按照前台department/addPosition.htmls继续找下去,如果想在此打住,不要再去前台了,添加注解】

@RequestMapping("addPosition")

public void addPosition(Position position){

position.setCreateDate(new Timestamp(System.currentTimeMillis()));

position.setUpdateDate(new Timestamp(System.currentTimeMillis()));

//操作人 未插入

positionService.save(position);

}

更改之后如下:

@RequestMapping("addPosition")

@ResponseBody

public void addPosition(Position position){

position.setCreateDate(new Timestamp(System.currentTimeMillis()));

position.setUpdateDate(new Timestamp(System.currentTimeMillis()));

//操作人 未插入

positionService.save(position);

}

问题2:

在此基础上,又发现一种新的情况:

后台代码如下:

@RequestMapping("verifyFormula")

@ResponseBody

public void verifyFormula(String formula){

InfixInToSuffix is = new InfixInToSuffix();

String a = null;

try {

if(is.userPattern(formula)){

a = is.toSuffix(formula);

}

} catch (Exception e) {

System.out.println("公式有问题");

}

}

或者:

@RequestMapping("verifyFormula")

@ResponseBody

public String verifyFormula(String formula){

InfixInToSuffix is = new InfixInToSuffix();

String a = null;

try {

if(is.userPattern(formula)){

a = is.toSuffix(formula);

}

} catch (Exception e) {

System.out.println("公式有问题");

}

return a;

}

这两种情况,虽然前台js中使用ajax访问了后台,但是后台方法处理完

1.void没有返回值

2.虽然有返回值,但是String a = null;可能会直接将这个a返回,但是a初始化就是Null,也就是没有开辟实际的空间,这样也是返回不到ajax的回调函数中的!!!!!

多注意这两种情况!!

正确处理这种情况,应当:

@RequestMapping("verifyFormula")

@ResponseBody

public String verifyFormula(String formula){

InfixInToSuffix is = new InfixInToSuffix();

String a = "";

try {

if(is.userPattern(formula)){

a = is.toSuffix(formula);

}

} catch (Exception e) {

System.out.println("公式有问题");

}

return a;

}

最起码的给String a = "";即可!!

问题3:

同样在controller处理完后,前后台都没有报错,但是也是没有进入ajax回调函数

后台错误代码展示:

@RequestMapping(value = "boundWx" ,produces = "text/json;charset=UTF-8")

@ResponseBody

public String boundWx(String name,String password){

List members = new ArrayList();

Member member = memberService.findByUsername(name);

if(member == null){

member = memberService.findByMobile(name);

if(member == null){

members = memberService.findListByEmail(name);

}

}

if(members.size() > 0){

member = members.get(0);

}

if(member != null){

if(DigestUtils.md5Hex(password).equals(member.getPassword())){

return "wx/member/index.jhtml";

}else{

return "密码有误";

}

}else{

return "用户信息有误";

}

}

问题解决:

因为这个方法中 返回给前台后是有乱码出现的,所以加了:@RequestMapping(value = "boundWx" ,produces = "text/json;charset=UTF-8")

而问题就出在:此处的produces = "text/json;charset=UTF-8"与返回值的格式并不相符。

更改为如下的就可以正常返回了:

@RequestMapping(value = "boundWx" ,produces = "text/html;charset=UTF-8")

问题4:

新的同类型问题

ajax + springMVC后台处理完成跳转给前台的ajax的回调函数中,

表现:后台程序执行了三次,但是最后都不会返回到前台回调函数中,且前后台都不报错!

问题:请认真检查前台使用了ajax的是在哪个按钮的点击事件中,这个点击事件是否 return ; 请认真检查前台jsp中是否重复引用了jQuery等js文件导致后台会重复执行几次

问题5:

依旧是ajax + springMVC后台处理完成跳转给前台的ajax的回调函数中,

虽然前台返回状态是200,请求成功,但是始终不进入ajax的success回调方法。

问题:检查后台接口是不是返回的是null,也就是return null;

因为即使状态是200.但是只能代表前后台是联通的,但是不代表返回的参数是有值的,如果return null;那么回到前台以后,判断success字段值如果没有值,当然会进入error的回调函数,而不会进入success的回调函数。

使用匿名函数在回调函数中正确访问JS循环变量

有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...

ajax执行成功后,在success回调函数中把后台返回的list还原到html的table中

需求描述:前台通过onclick触发ajax,到后台返回一个list(json格式的),把list插入到html的table中. 思路简介: ̄□ ̄|| 刚开始的时候,是没有思路的,就卡在了,怎么把 a ...

ajax回调函数中使用$(this)取不到对象的解决方法

如果在ajax的回调函数内使用$(this)的话,实践证明,是取不到任何对象的,需要的朋友可以参考下 $(".derek").each(function(){ $(this).cl ...

ajax访问 aspx.cs后台

--前台$.ajax({ type: "POST", contentType: "application/json", url: "WebForm2. ...

函数的参数是函数,函数中Ajax返回的回调函数中的函数运行

调用函数 checkAjax('addrinfo',formdata,vzxcv); 函数checkAjax function checkAjax(url,formdata,call_back){ / ...

js进阶 14-3 如何接收load函数从后台接收到的返回数据

js进阶 14-3 如何接收load函数从后台接收到的返回数据 一.总结 一句话总结:load方法的回调函数的参数即可接收从后台的返回数据. 1.load方法的回调函数的参数是什么? 语法:load( ...

$.ajax({ }) 里面的success函数不执行 | 回调函数返回的值 用对象,下标,键值对访问不到时

原因一般是  dataType:'json' 数据类型设置成了json  ,去掉这个设置即可 $.ajax({ }) 回调函数返回的值 用对象,下标,键值对访问不到时,考虑是否返回数据为字符串 考虑是 ...

vue中使用Ajax(axios)、vue函数中this指向问题

Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求.Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios中文文档库:http ...

随机推荐

Linux Shell 文本处理工具集锦

本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

JAVA如何随机生成一个汉字

package com.test; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Rando ...

Objective-C的singleton模式

最近因为在ios应用开发中,考虑到一些公共方法的封装使用,就决定使用单例模式的写法了..不知道,Object-c中的单例模式的写法是否和java中的写法是否有所区别?于是阿堂从网上一搜,发现“ Obj ...

Scala-的元组和映射

package com.mengyao.scala.function /** * Scala 映射 * Scala中的Key,Value集合被称为映射,映射中的每一个key,value称为对偶 *   ...

2015 多校联赛 ——HDU5299(树删边)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

JDK8安装时错误1335的解决

Win7安装JDK8 update65版本时,碰到错误1335,错误信息大概是一个cab文件损坏了,搜索了一下,有网站提供这个错误的修补工具,不过最终我没有下载这个工具,说是系统问题,但工具不是MS官 ...

gdb调试原理及qemu中的gdbserver

(一)gdb调试原理 此部分转自:https://blog.csdn.net/u012658346/article/details/51159971     https://www.cnblogs.c ...

fly.js抛物线连续不断加入购物车

http://yanshi.sucaihuo.com/jquery/2/298/demo/

jquery.fn.extend() 与 $.jquery 作用及区别

原文:http://www.cnblogs.com/liu-l/p/3928373.html jQuery.extend()这个方法,主要是用来拓展个全局函数啦,例如$.ajax()这种,要不就是拓展 ...

Mac安装搭建sublimeText3开发Nodejs环境

原文] [基本环境 安装Nodejs 这个直接就可以去官网下载就可以了.Nodejs官网 根据自己的PC系统类型选择对应的版本下载之后就可以了. 安装SublimeText3 这个也是直接去Subli ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值