Проблема с получением текста JSON через ajax - PullRequest
0 голосов
/ 09 июня 2011

Я не могу получить текст Json через ответ сервлета. Код сервлета работает. Мой код Ajax неисправен. Код ...

var json = eval('(' + xmlhttp.responseText +')');

... ничего не возвращает. Требуется ли для этого баночка? Ниже мой код:

//Servlet

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    List result = new ArrayList();
    result.add(new SearchResponse("001", "User Manual", "Operator"));
    response.setContentType("application/json");         
    response.setCharacterEncoding("UTF-8");        
    response.getWriter().write(new Gson().toJson(result));
}

В моем Ajax я пишу следующий код, чтобы получить его.

function ajaxFunction() {
    alert("function called...");
    if (xmlhttp) {
        alert(AJAX_SERVLET);
        xmlhttp.open("GET", AJAX_SERVLET, true); //AJAX_SERVLET has the servlet path
        xmlhttp.onreadystatechange = handleServerResponse;
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlhttp.send(null);
    }
}

function handleServerResponse() {
    alert(xmlhttp.readyState);
    if (xmlhttp.readyState == 4) {
        alert(xmlhttp.status);
        if (xmlhttp.status == 200) {
            alert(xmlhttp.responseText);
            alert(json);
            var json = eval('(' + xmlhttp.responseText +')');
            request.setAttribute("output",json);
        } else {
            alert("Error during AJAX call. Please try again");
        }
    }
}

Ответы [ 2 ]

1 голос
/ 09 августа 2011

У меня была такая же проблема, но я изменил часть инициализации, и в моем случае она работает.

Код блокировки:

     var json = eval('(' + xmlhttp.responseText +')');   

Рабочий код:

var json = "";  
     json = eval('(' + xmlhttp.responseText +')');     

С уважением Шьям Миятра

0 голосов
/ 10 июня 2011

Я не могу помочь с JSP, но, надеюсь, этот пример поможет для частей JavaScript:

<script>
...
function handleServerResponse() {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            var json = JSON.parse(xmlhttp.responseText);

            // json now contains an array of objects, eg:
            //
            // [
            //   {
            //     "productNumber"  : "001",
            //     "productType"    : "User Manual",
            //     "funcDesignation": "Operator"
            //   }
            // ]

            // grab the first (and only) object in the array
            var firstRecord = json[0];

            // update the UI by selecting DOM elements and rewriting their contents
            document.getElementById('product-number').innerHTML =
                firstRecord.productNumber;

            document.getElementById('product-type').innerHTML =
                firstRecord.productType;

            document.getElementById('func-designation').innerHTML =
                firstRecord.funcDesignation;

        } else {
            alert("Error during AJAX call. Please try again");
        }
    }
}
</script>
...
<h4>Product</h4>
<div>Number: <span id="product-number"></span></div>
<div>Type: <span id="product-type"></span></div>
<div>Function: <span id="func-designation"></span></div>
...

PS - вы можете рассмотреть jQuery, MooTools или другую современную среду JavaScript;они делают вызовы AJAX и работают с DOM намного проще.

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