2016-03-07 96 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。