如何使用JSON将对象从Java传递到JavaScript?
不久前,我得到了使用JSON将东西从我的应用程序传递到JavaScript的答案。我不明白的是,我实际上是如何将对象传递给JavaScript的,因为我发现必须使用.json文件如何使用JSON将对象从Java传递到JavaScript?,javascript,json,jsp,servlets,Javascript,Json,Jsp,Servlets,不久前,我得到了使用JSON将东西从我的应用程序传递到JavaScript的答案。我不明白的是,我实际上是如何将对象传递给JavaScript的,因为我发现必须使用.json文件 然后呢?我能够将Java对象转换为JSON对象,但这是我无法理解的。我正在使用JSP和servlet来编写我的应用程序。JSON基本上是一种Javascript对象存储格式。因此,它是Javascript的本机代码 加载JSON文件 当您的网页像这样加载时,您可以加载JSON文件,就像任何.js文件一样: <ht
然后呢?我能够将Java对象转换为JSON对象,但这是我无法理解的。我正在使用JSP和servlet来编写我的应用程序。JSON基本上是一种Javascript对象存储格式。因此,它是Javascript的本机代码 加载JSON文件 当您的网页像这样加载时,您可以加载JSON文件,就像任何.js文件一样:
<html>
<head>
<script type="text/javascript" src="myfile.json"></script>
</head>
—clipped—
其中,anz()的定义如下:
function anz(JSONdata) {
//process data here
}
JSON也可以在页面呈现/加载后加载
从JSON文件获取数据 所以,一旦加载了JSON文件,并使用JSON数据调用回调函数,您就可以读取它——就像其他任何文件一样 如果已将其传递给回调函数
{"data":{"user_name":"Joe", "user_id":"97304239042", "user_rank":3}}
…要获取用户名,请执行以下操作:
function anz(JSONdata) {
var userName = JSONdata.data.user_name;
// userName returns "Joe"
}
文件扩展名
.json
与此无关。它只是关于HTTP头的。只要它是application/json
,网络浏览器就完全知道如何处理它。对于JSP/Servlet,您基本上需要创建一个Servlet类,该类侦听特定的url模式
,相应地处理请求参数或路径信息,并将JSON字符串写入doGet()
方法中的响应
下面是一个虚构的servlet示例,它根据国家/地区下拉列表中的选定值返回城市选项值/标签对,用于将完整的Java对象转换为oneliner中的JSON:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String country = request.getParameter("country");
Map<String, String> cities = cityDAO.find(country);
String json = new Gson().toJson(cities);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
以下是JSP的相应HTML示例:
<select id="country" name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.key}">${country.value}</option>
</c:forEach>
</select>
<select id="city" name="city">
<option>Please select country</option>
</select>
${country.value}
请选择国家/地区
(假设${countries}
是应用范围内的地图
)
希望这件事能澄清其中一件:)
另见:
$(document).ready(function() {
$('#country').change(function() {
var selectedCountry = $(this).val();
var servletUrl = 'cities?country=' + selectedCountry;
$.getJSON(servletUrl, function(options) {
var city = $('#city');
$('>option', city).remove(); // Clean old options first.
if (options) {
$.each(options, function(value, label) {
dropdown2.append($('<option/>').val(value).text(label));
});
} else {
dropdown2.append($('<option/>').text("Please select country"));
}
});
});
});
<select id="country" name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.key}">${country.value}</option>
</c:forEach>
</select>
<select id="city" name="city">
<option>Please select country</option>
</select>