ajax的success回调函数不触发原因解析以及json对象知识总结

来源:互联网 发布:网络教育优势 编辑:程序博客网 时间:2024/05/18 04:51
  • 场景
    使用ssm框架做项目,页面使用ajax发送请求修改数据

  • 问题
    数据库的数据正常修改了,但是ajax的success回调函数没有触发,里面的代码没有执行,页面没有进行刷新显示

  • 代码

这是jsp页面发送的请求

function updateCustomer() {    $.post("<%=basePath%>customer/update",$("#edit_customer_form").serialize(),function(data){            alert("客户信息更新成功!");            window.location.reload();        });    }

这是后台代码

@RequestMapping("customer/update")    public String  updateCustomer(Customer customer){        customerService.updateCustomer(customer);        return "ok";    }

结果:后台代码执行完后,回调函数的这两行没有执行

        alert("客户信息更新成功!");        window.location.reload();
  • 原因分析
    一开始以为是修改数据,修改完成后,不需要返回值,回调函数里面的data也没有用到,因此就没有给回调函数响应数据.但是页面的回调函数要执行,那么只有响应相应格式的数据给data,才会触发这个函数,里面的代码才会执行.

    在这段代码里,回调函数需要的是一个字符串,但是后台没有给出,所有就不会执行这个函数里面的代码

  • 修改代码

    @RequestMapping("customer/update")    @ResponseBody//springmvc加上这个注解后可以直接将return的数据响应到浏览器,这样前台回调函数就可以执行了    public String  updateCustomer(Customer customer){        customerService.updateCustomer(customer);        return "ok";    }
  • 关于json对象

    • json对象的格式

      {“username”:”tom”,”password”:”1234”,”salary”:10000}
      花括号里面的key值必须用”“

    在springmvc中可以使用注解@ResponseBody直接把pojo对象转成json对象响应到页面中去

    @RequestMapping("customer/edit")    @ResponseBody    public Customer  editCustomer(Model model,Long id){        Customer customer = customerService.findCustomerByID(id);        return customer;    }
  • 在java后台代码中如果要传递json格式的字符串,需要用到转义字符
//拼接成json格式的字符串,注意这不是json对象,只是json格式的字符串String fullpath  =FILEADDRESS +filename;String result="{\"fullpath\":\""+fullpath+"\"}";
  • 在前台页面可以使用var json = $.parseJSON(result); 把json格式的字符串转成json对象
阅读全文
0 0