#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 в строку… и спасибо за помощь