2011-06-01 169 views
1

我使用Ajax來作出一個servletand請求接收JSON字符串在JavaScript中的JSON字符串解析?

servlet代碼//服務器端

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setHeader("Content-Type", "text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 
     Gson gson = new Gson(); 
     try { 
     ArrayList<SearchedCourse> searchedCourses = null; 
     int semesterNo = request.getParameter("semesterNo"); 
     searchedCourses = //Using function to retrieve data from DB and return an ArrayList 
     String courses = gson.toJson(searchedCourses); 
     out.write(courses); 
       } 
      } 
     } finally { 
      out.close(); 
     } 
    } 

,這是返回JSON字符串「我用螢火蟲來複制」

[{"courseNumber":1619,"courseNo":"HADTA1100","courseName":"قرآن كريم (1) جزء عم","courseExamDate":"Aug 21, 2011","courseExamTimeFrom":"14:30","courseExamTimeTo":"15:30"},{"courseNumber":1663,"courseNo":"HADTB1100","courseName":"قرآن كريم (2) جزء تبارك","courseExamDate":"Aug 23, 2011","courseExamTimeFrom":"14:30","courseExamTimeTo":"15:30"}] 

我使用下面的代碼在客戶端側

jQuery.ajax({ 
    url: 'auth/json/AvailableCoursesGetter', 
    type: "GET" , 
    dataType: "json", 
    data: { 
     'semesterNo': 20112 
    }, 
    success: function(data) { 
     for (var i = 0, len = data.length; i < len; i++) { 
      document.write(data[i].courseNumber); 
     } 

    } 
}); 
解析JSON串

它在Mozilla FireFox4上正常工作,但在Google Chrome和IE中它不顯示任何東西

有什麼幫助嗎?

+0

可能是因爲courseNumber的不在引號中? – barfoon 2011-06-01 16:40:40

+0

不需要在JSON中引號。 – Eli 2011-06-01 16:41:28

+0

我正在使用GSON庫來生成此字符串 – wshurafa 2011-06-01 16:42:35

回答

3

我剛纔看到你輸出你的servlet以下標題:

response.setHeader("Content-Type", "text/html;charset=UTF-8"); 

嘗試改變內容類型application/json

1

使用for in語法遍歷數組被認爲是不好的做法。試試這個:

for (var i = 0, len = data.length; i < len; i++) { 
    console.log(data[i].courseNumber); 
} 

如果你以任何方式頁面已經擴展了數組原型,然後使用for in會導致你的腳本遍歷這些擴展屬性,如果這些之前,你的實際值被擊中,它會最有可能導致錯誤。避免這種情況的最好方法是使用傳統的for循環。

+0

同樣的事情,只適用於Firefox4:S – wshurafa 2011-06-01 16:49:16

+0

我沒有問題在我的瀏覽器中運行這個特定的代碼,我懷疑你的環境有一些特殊的問題會導致你的問題。你能否用更多的相關信息來更新你的問題,這些信息可能會提供有關該問題的線索? – Eli 2011-06-01 16:56:27

+0

不僅認爲使用''for in''遍歷數組是不好的做法,但它實際上可能會破壞你的代碼。 ''因爲''不能保證迭代的順序。元素「n + 1」可能在元素「n」之前迭代。這可能會破壞代碼,因此不要使用'in for''來遍歷數組。 – 2011-08-05 11:55:17

3

@Eli對於使用for in是一個壞主意是正確的,但在我看來,代碼應該工作。以下jsFiddle可在IE9中使用:http://jsfiddle.net/shaneblake/arhB7/

您確定數據以正確的格式返回而不是字符串嗎?你有沒有試過用JSON.parse(data)來確定?

+0

你可以使用''typeof data''來查看你是否得到一個對象或一個字符串。還要考慮輸出接收到的數據,看看你得到了什麼:''console.log(data);'' – 2011-06-01 17:21:44