【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
问题1:
使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中
问题展示:
问题解决:
最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法不认识最后返回的是给ajax的data,而是以为要去找这个页面所以并未找到!!
@RequestMapping("/queryAllDisease")
@ResponseBody
public PageInfo<Disease> 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也会按照前台请求过来的页面地址去找,找不到就会如下:
所以,在后台:【以下的代码依旧是 按照前台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<Member> members = new ArrayList<Member>();
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的回调函数。
【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中的更多相关文章
- 【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数
问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方 ...
- 使用匿名函数在回调函数中正确访问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 ...
随机推荐
- ajax加载表格数据
一.html代码 <style type="text/css"> .table-taskinfo table tr { border-top: 2px solid #9 ...
- SprignMVC+myBatis整合
转载自:http://lydia-fly.iteye.com/blog/2153076 学习本节内容请先看"MyBatis的基本应用".地址:http://lydia-fly.it ...
- 【leetcode】 Letter Combinations of a Phone Number(middle)
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 【leetcode】Word Search II(hard)★
Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...
- C++基础练习题(一): 查找最短单词
/*<说明> 编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找 </说明>*/ #include<time.h> #inclu ...
- struts2截取字符串
<struts:if test="null!=pushAd&&pushAd.length()>14"> <struts:property v ...
- 240个jquery插件(转)
http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/File upload Ajax File U ...
- supersr--NSURLSessionConfiguration-下载进度
//// ViewController.m// 下载进度 // // Created by Super on 14/7/4. // Copyright (c) 2014年 iOS. All r ...
- [Android Pro] Service (startservice , bindservice , unbindservice, stopService)
1: startService -------stopService (this will call onDestroy) 2: bindService -------unbindService ...
- python基础——使用@property
python基础——使用@property 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9 ...