2016-03-07 98 views
0

我正面临ExtJS 4.1.3的问题。 在我的ExtJS的控制,我把这样一个Ajax请求:在Ext.Ajax.Request之后解码JSON的问题

Ext.Ajax.request(
    { 
     url: '/my/url/method.do' 
     ,timeout: 1800000 
     ,jsonData: param 
     ,success:function(response) 
     { 
      var jsonData = Ext.JSON.decode(response.responseText); 
      alert(jsonData); 
      // some code 
     } 
     ,failure:function(response) 
     { 
      // some code 
     } 
     ,scope:this 
    } 
); 

这就是所谓的春季方法:

@RequestMapping(value = "/my/url/method.do") 
public @ResponseBody String method(Locale userLocale, @RequestBody Param[] param) { 
    return "string" + "<br/>" + "string"; 
} 

它运作良好,在谷歌Chrome和IE,但不是在Firefox浏览器。事实上,我得到以下错误:

Ext.Error: You're trying to decode an invalid JSON String: string<br/>string 

而且我不知道为什么,如果我在Firefox的控制台执行以下代码它不工作,因为,它的工作原理:

Ext.JSON.decode("string<br/>string") 

所以如果有人能帮助我,我将不胜感激!

+1

我不得不说,它不应该工作,因为这不是一个有效的JSON字符串。在我看来,像IE和Chrome给你一个误报。 –

+0

我无法复制,['Ext.JSON.decode(“string
string”)'](https://fiddle.sencha.com/#fiddle/16p4)在我的所有浏览器中都会引发错误。你能否检查后端框架是否最终在浏览器之间产生不同的输出? – Alexander

回答

0

感谢您的回答。 此网站http://jsonlint.com/表示"string<br/>string"作为有效的JSON字符串。但它是一个“错误”的JSON验证,因为它不是正确的JSON格式。 我解决了我的问题,在控制器的@EequestMapping注释中添加produce="application/json"。所以现在Ext.JSON.decode()甚至可以在Firefox中使用。

我也可以发回一个可以使用ajax请求序列化的对象,然后解码响应以获取数据(使用我的字符串),因为Spring会自动将对象序列化为JSON。