ajax 不走success函数 请教大神
 mapper:
<select id="getDate" resultType="org.his.beans.OutBound">
    select distinct ny from OutBound order by ny desc
</select>
 controller:
@RequestMapping("/main")
    @ResponseBody
    public ModelAndView main(HttpServletResponse response, ModelAndView mv, HttpServletRequest request) {
        try {
            List<OutBound> list = service.getDate();
            JSONArray jsonArray = JSONArray.fromObject(list);
            mv.addObject("jsonArray",jsonArray);
            System.out.println(jsonArray);
            return mv;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 jsp:
    <script type="text/javascript">
    $(document).ready(
            function() {
                $.ajax({
                    type : "POST",
                    url : "main",
                    dataType : "json",
                    success : function(data) {
                        alert(data);
                        for (var i = 0; i < data.length; i++) {
                            $("#ny").append(
                                    "<option>" + data[i].NY + "</option>");
                        }
                    }
                });
            });
</script>

8个回答

建议解决思路:
1.首先查看controller是否编写正确,即直接在地址栏上输入url看是否进入controller对应的方法,然后是否有返回值
2.第一步没问题,那么就是ajax请求的问题:第一,查看请求方式是否正确包括:url,参数形式;第二,返回值处理方式是否正确:先看是否接收到返回值。

那么从你贴出的代码来看,貌似url有点问题,你可以测试下.
希望对你的问题有所帮助

zhangqwe886
咸鱼zhang丶 感谢您为我这个小菜鸟耐心的解答, 我去测试一下
接近 2 年之前 回复
maoyuanming0806
maoyuanming0806 回复zhangqwe886:再次看了一下你的controller,首先,加了@ResponseBody注解,有了相关json解析jar包引入(如jackson-databind 可maven仓库中搜索这个)工程,那么返回值直接把数据返回就可以,不需要额外解析成json数据返回。springMVC的这个注解内部会帮你完成转换,所以请求方法的返回值直接改成实际返回值就可以。因为如果放到model中,就可能需要EL等其他表达式才可以获取。所以,建议进行测试:0.把@RespesonBody注解去掉试下在浏览器直接输入访问的url,看返回是否时你使用JSONObject解析的json格式数据 1. 不行的话,还是使用@ResponseBody注解,然后检查是否引入(jackson-databind)json解析jar包,然后把返回值改成List<OutBound> 或Object,然后直接return list,再次浏览器直接输入url,看返回的返回值是什么数据格式。希望能帮到你
接近 2 年之前 回复
zhangqwe886
咸鱼zhang丶 回复maoyuanming0806: 感谢您的谏言 运行是走方法的 里面的输出语句也有输出 ,到success里面写的alert()就没走了 dataType类型 换 text、html、json、都不走success
接近 2 年之前 回复
maoyuanming0806
maoyuanming0806 ajax的url请求是否成功可以打开浏览器---》开发者工具(f12):查看网络这一栏,然后看看你的这个请求是否成功发出去了
接近 2 年之前 回复

因为你返回的数据它处理不成json,怎么成功

Dawn_WL
Dawn_WL 返回list类型数据,debug一下,看能否进到后台,再看数据内容,到前台打断点看看
接近 2 年之前 回复
Dawn_WL
Dawn_WL 返回list集合,debug一下,看进到后台了吗,看数据什么样的,再到前台打断点看看
接近 2 年之前 回复
zhangqwe886
咸鱼zhang丶 感觉也是的,所有类型都试了都没进success,要怎么修改呢
接近 2 年之前 回复

有没有成功请求了控制器

ii950606
踮脚敲代码 回复zhangqwe886: 添加个错误函数接收
接近 2 年之前 回复
zhangqwe886
咸鱼zhang丶 有的 像一楼说的返回的数据不在dataType类型中
接近 2 年之前 回复

加了@ResponseBody后,直接返回list就可以,框架会帮你转json

zhangqwe886
咸鱼zhang丶 感谢您的谏言
接近 2 年之前 回复

建议:
检查ajax调用的方法是否正确,不同的Jquery调用的方法不一样,后台的Json字符串封装也是不一样的,最新的版本的直接返回string类型的Json字符串就可以,但老的版本返回的是JsonResult类型的才识别

zhangqwe886
咸鱼zhang丶 感谢您的谏言,使用的最新版本的,用了SSM框架
接近 2 年之前 回复

配置了responseBoby你直接返回list就可以了

zhangqwe886
咸鱼zhang丶 感谢您的谏言
接近 2 年之前 回复

用text类型吧,在complete里看看是否成功返回了

zhangqwe886
咸鱼zhang丶 返回了,所有类型都试了 收不到,好像返回的数据超脱了一样
接近 2 年之前 回复
  controller:
@RequestMapping("/main")
    @ResponseBody
    public ModelAndView main(HttpServletResponse response, ModelAndView mv, HttpServletRequest request) {
        try {     
            return service.getDate();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 <script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type : "POST",
            url : "main",
            dataType : "json",
            success : function(data) {
                var b = "<option>请选择</option>";
                for ( var i = 1; i < data.length; i++) {
                    b += "<option value='"+data[i]+"'>" + data[i] + "</option>";
                    alert(b);
                    $("#ny").html(b);
                }
            }
        });
    });

图片说明

修改之后可以进success了 下面循环alert()弹出的数据都是object,界面显示不了要什么处理呢

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问