Разбор строк JSON в JavaScript? - PullRequest
1 голос
/ 01 июня 2011

Я использую ajax, чтобы сделать запрос к сервлету и получить json String

код сервлета // Сторона сервера

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 "Я использовал firebugчтобы скопировать его "

[{"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 этоничего не отображается

любая помощь?

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

@ Илай правильно сказал, что использование for in - плохая идея, но мне кажется, что код должен работать. В IE9 работает следующий jsFiddle: http://jsfiddle.net/shaneblake/arhB7/

Вы уверены, что данные возвращаются в правильном формате, а не в виде строки? Вы пытались использовать JSON.parse(data), чтобы убедиться?

3 голосов
/ 01 июня 2011

Я только что увидел, что вы выводите следующий заголовок в свой сервлет:

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

Попробуйте изменить тип содержимого на application/json.

1 голос
/ 01 июня 2011

Считать итерацию по массиву с использованием синтаксиса for in считается плохой практикой.Попробуйте вместо этого:

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

Если ваша страница каким-либо образом расширила прототип Array, то использование for in приведет к тому, что ваш скрипт будет выполнять итерации по этим расширенным свойствам, и если они будут затронуты до вашего фактическогозначения, это, скорее всего, приведет к ошибке.Лучший способ избежать этого - использовать традиционный цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...