簡體   English   中英

javascript 中的 JSON 字符串解析?

[英]JSON String parsing in javascript?

我正在使用 ajax 在 servlet 上發出請求並接收 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"}]

我使用下面的代碼在客戶端解析 Json 字符串

  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);
        }

    }
});

它在 Mozilla FireFox4 上運行良好,但在 Google Chrome 和 IE 上它不顯示任何東西

有什么幫助嗎?

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

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

我剛剛在您的 servlet 中看到您的 output 以下 header :

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

嘗試將內容類型更改為application/json

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

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

如果您的頁面以任何方式擴展了 Array 原型,那么使用for in將導致您的腳本遍歷這些擴展屬性,如果這些屬性在您的實際值之前被命中,則很可能會導致錯誤。 避免這種情況的最好方法是使用傳統的 for 循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM