передача данных с использованием JSON

#javascript #ajax #json #jsp #xmlhttprequest

#javascript #ajax #json #jsp #xmlhttprequest

Вопрос:

Я пытаюсь получить часть данных с сервера, используя технологию JSP. Для этого я использую объект JSON. На стороне клиента я использую XMLHttpRequest для получения данных.

Чтобы проверить, работает ли это должным образом, я написал следующий фрагмент кода:

 <head>
<script type="text/javascript">
            function test(data) {
 if(data){
     var jsonObj= eval('('   data   ')');
     var Question= jsonObj.Question;
     document.write(Question);
 }
}

function handler() {
 if(this.readyState == 4 amp;amp; this.status == 200) {
  // so far so good
  if(this.responseText != null amp;amp; this.responseText)
     // success!
   test(this.responseText);
  else
   test(null);
 } else if (this.readyState == 4 amp;amp; this.status != 200) {
  // fetched the wrong page or network error...
  test(null);
 }
}
function xyz(){
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("POST", "fetch.jsp", true);
client.send();
}
        </script>

    </head>
    <body>
        <h1>Hello World!</h1>
        <br><br><input  id="Q" type="button" onclick="xyz()" >
    </body>
  

на стороне сервера я сделал следующее:

 <%@page import="net.sf.json.JSONObject"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <% JSONObject jsonObj= new JSONObject();
           jsonObj.put("Question","What is your name?");
           jsonObj.put("Opt1","ji");
           jsonObj.put("Opt2","ji");
           jsonObj.put("opt3","ma");
           jsonObj.put("opt4","sa");

      String str= jsonObj.toString();
      response.setContentType("text/plain");
      response.getWriter().write(str);

%>
  

К сожалению, я не могу получить ответ.

Комментарии:

1. text/plain должно быть application/json

2. Не используйте eval , найдите подходящий анализатор JSON: github.com/douglascrockford/JSON-js

Ответ №1:

Вы записываете свой JSON в тело HTML-документа, а затем отправляете HTML-документ в качестве ответа.

Не делайте этого. Ответом должен быть просто JSON.

Ответ №2:

Вам нужно писать с типом контента application / json.

Также не используйте eval в тестовой функции.

Когда данные в формате json, тестовая функция может обращаться к данным как к объекту json!

В случае синтаксического анализа строки используйте.

 JSON.parse(string).   
  

Но не используйте eval

Комментарии:

1. когда я устанавливаю тип содержимого как json, необходимо ли преобразовывать объект json в строку… и спасибо за помощь