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

  • 场景
    使用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对象

你可能感兴趣的:(ajax)