语法错误JSON.parse ajax.responsetext(Spring,jquery,ajax,gson)

时间:2017-03-29 12:45:29

标签: jquery json ajax spring

我正在使用Netbeans& spring framework4.0.1,没有注释只有普通模型& view

当我尝试将JSON发送到jsp页面&使用ajax函数回调,我无法解析响应文本,给我这个错误 " SyntaxError:JSON.parse:JSON数据第12行第1列的意外字符" 这是控制器代码

 public ModelAndView contentlistObjective(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
            ModelAndView mv = new ModelAndView("createsettings");
           List<Content> contents = new ArrayList<>();
     //       JSONObject obj = new JSONObject();
           try {
             DriverManagerDataSource dataSource;
            dataSource = (DriverManagerDataSource)this.getBean("dataSource",hsr.getServletContext());
            this.cn = dataSource.getConnection();  
                 Statement st = this.cn.createStatement();
                 String objectiveid = null;
                    objectiveid = hsr.getParameter("seleccion3");         
              ResultSet rs1 = st.executeQuery("SELECT name,id FROM         public.content where public.content.id IN (select public.objective_content.content_id from public.objective_content where public.objective_content.objective_id = "+objectiveid+")");

           while (rs1.next())
            {
     Content eq = new Content();
     contents.add(eq);
//   obj.put("name", rs1.getString("name"));

            }

        } catch (SQLException ex) {
            System.out.println("Error leyendo contents: " + ex);
        }
       Gson gson = new GsonBuilder().setPrettyPrinting().create();
       String json = gson.toJson(contents);
       hsr1.setContentType("application/json");

//      System.out.print(json);
//      json = json.replaceAll("\n", "");
//      json = json.trim();
//      json = json.substring(1,json.length()-1);
//      json = json.replace("\\","");
       mv.addObject(json);
        return mv;
    }   

当我调试我返回的json时有这个值 [   {     &#34;姓名&#34;:&#34;报纸&#34;   },   {     &#34; name&#34;:&#34;小说&#34;   } ] 以下是JSP代码

function comboSelectionObjective()
            {
                if (window.XMLHttpRequest) //mozilla
                {
                    ajax = new XMLHttpRequest(); //No Internet explorer
                } else
                {
                    ajax = new ActiveXObject("Microsoft.XMLHTTP");
                }             

                ajax.onreadystatechange = funcionCallBackContent;
             var seleccion3 = document.getElementById("objective").value;
                ajax.open("GET", "createsetting.htm?select=contentlistObjective&seleccion3=" + seleccion3, true);
                ajax.send("");
}
function funcionCallBackContent()
            {
                if (ajax.readyState === 4) {
                    if (ajax.status===200){
                   var data =JSON.parse(ajax.responseText);
                 console.log(data);
                 }

我正在使用gson库,我之前使用Json简单,但它给出了完全相同的错误 我也试图替换所有转义字符,但也没有工作

问题是我没有使用注释吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您需要返回json字符串而不是ModelAndView对象。

addOjbect对象上调用方法ModelAndView时,您正在做的是向模型添加或覆盖属性。

ModelAndView api

返回ModelAndView你基本上返回一个字符串,其中包含你想要显示的视图名称,所以你要返回一个html页面,而不是一个json对象。

您需要做的是返回一个json字符串。所以它应该是这样的:

@ResponseBody
public String contentlistObjective(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {

  .... your code

  hsr1.setContentType("application/json");

  //You should double check before returning. Just an example.
  return gson.toJson(contents);
}

Mapping the response body with the @ResponseBody annotation

  

@ResponseBody注释[...]可以放在方法上   表示返回类型应直接写入HTTP   响应主体(不放在模型中,或解释为视图   名称)。

如果您根本不想使用任何anotation并采用旧式方式,则必须将json内容直接放在响应输出中。类似的东西:

String json = new Gson().toJson(contents);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);

我希望你明白这一点。