Angularjs 意外令牌 JSON
Angularjs Unexpected token JSON
我对 angularjs 和 JSON 有疑问。
这是我的代码。
list_user.jsp(这是我打印 table 的页面)
<tr ng-repeat="per in persons">
<td>{{ per.user }}</td>
<td>{{ per.password }}</td>
<td>{{ per.profile }}</td>
</tr>
controller.js
$http({
method : 'POST',
url : 'views/user/user.json'
}).success(function(data){
$scope.persons = data;
});
user.json
[
{
"user": "Quarterback",
"password": 5,
"profile": "ppp"
},
{
"user": "Wide Receiver",
"password": 89,
"profile": "oooo"
}
]
这样 table 可以正确生成,但是 json 是固定的。
现在我将通过从查询中获取数据来粘贴我想要打印数据的代码
controller.js
$http({
method : 'POST',
url : 'views/user/user.jsp'
}).success(function(data){
/*
var jsonStr="your json string";
var json=JSON.stringify(data);
json=JSON.parse(json)
console.log(json);
*/
console.log(data);
$scope.persons = data;
});
/*..*/之间的代码留给他们说明我也试过那条路没有成功。
user.jsp
JSONArray jdata = new JSONArray();
UserRest as = new UserRest();
jdata = as.getAll();
logger.info("jdata in user.jsp "+jdata);
UserRest.class(只需粘贴我创建 JSON 的代码)
while (iter.hasNext()) {
User ut = (User) iter.next();
JSONObject jtemp = new JSONObject();
jtemp.put("user", ut.getUserName());
jtemp.put("password", ut.getPassword());
jtemp.put("profilo", ut.getProfilo());
jarray.put(jtemp);
}
return jarray;
logger.info("jdata in user.jsp "+jdata)在user.jsp
中的结果
jdata in user.jsp [{"user":"aaaaaaa","password":"1111111","profile":"0"},{"user":"bbbbbbbb","password":"222222222","profile":"1"}]
如您所见,json 看起来一样,但是在浏览器中,我在控制台中调用 list_user.jsp 页面时 controller.js 中的值 "data" returns我
<? Xml version = "1.0" encoding = "utf-8"?>
我也试过 JSON.parse 或 JSON.stringify 但它不起作用。
我还在这里添加了 "track by $ index":
<tr ng-repeat = "for people track by $ index">
在 list_user.jsp 但它不起作用。
请帮助我,因为我不知道该怎么做了。
好吧,您的问题似乎是您应该调用 SERVICE,而不是 jsp。
A JSP 为您构建了一个新网页,因此它将显示:
< ? Xml version = "1.0" encoding = "utf-8"? >
尝试做一个 servlet(或使用 JAX-RS,如您所愿),而不是 jsp,并将您的逻辑放在 'doGet' 方法中(再次,或使用 JAX-RS) .
做一件简单的事,比如
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
response.getWriter().append(your working JSON properly hardcoded);
}
这种方式应该可行。然后把你的服务逻辑放在那里。
非常感谢@inigoD,解决了我的问题。
遵循新代码。
controller.js(UserRest 是 servlet)
$http({
method : 'POST',
url : 'UserRest'
}).success(function(data){
$scope.persons = data;
});
web.xml
<servlet>
<servlet-name>UserRest</servlet-name>
<servlet-class>"path application".UserRest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserRest</servlet-name>
<url-pattern>/UserRest</url-pattern>
</servlet-mapping>
UserRest.class
@Override
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try
{
JSONArray jdata = new JSONArray();
jdata = getAll();
logger.info("prima del response "+jdata);
response.setContentType("application/json");
response.getWriter().write(jdata.toString());
}
catch ( Exception ex )
{
ex.printStackTrace();
}
}
函数getAll()和我粘贴的一样,包含这段代码。
while (iter.hasNext()) {
User ut = (User) iter.next();
JSONObject jtemp = new JSONObject();
jtemp.put("user", ut.getUserName());
jtemp.put("password", ut.getPassword());
jtemp.put("profilo", ut.getProfilo());
jarray.put(jtemp);
}
return jarray;
我用 servlet 解决了问题,但我想调用 REST api。
我宁愿不要使用 servlet。
我更改我的代码。
controller.js
angular.module('inspinia')
.controller("DataTable",['$scope','$http',function($scope,$http){
$http({
method : 'GET',
url : '/api/utenti'
}).success(function(data){
$scope.persons = data;
});
web.xml
<servlet>
<servlet-name>SpringServlet</servlet-name>
<servlet-class>com.xxx.yyy.userInterface.servlet.SpringServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>SpringServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
UtentiController.class
@Path("/utenti")
@Component
@Scope("request")
public class UtentiController {
@GET
@Produces("application/json")
public JSONArray getAll() {
/* call the interface that return a json */
return jarray;
}
}
控制台中的错误是:
HTTP Status [404] – [Not Found]
Type Status Report
Message /api/utenti/
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
感谢您的帮助
我对 angularjs 和 JSON 有疑问。
这是我的代码。
list_user.jsp(这是我打印 table 的页面)
<tr ng-repeat="per in persons">
<td>{{ per.user }}</td>
<td>{{ per.password }}</td>
<td>{{ per.profile }}</td>
</tr>
controller.js
$http({
method : 'POST',
url : 'views/user/user.json'
}).success(function(data){
$scope.persons = data;
});
user.json
[
{
"user": "Quarterback",
"password": 5,
"profile": "ppp"
},
{
"user": "Wide Receiver",
"password": 89,
"profile": "oooo"
}
]
这样 table 可以正确生成,但是 json 是固定的。 现在我将通过从查询中获取数据来粘贴我想要打印数据的代码
controller.js
$http({
method : 'POST',
url : 'views/user/user.jsp'
}).success(function(data){
/*
var jsonStr="your json string";
var json=JSON.stringify(data);
json=JSON.parse(json)
console.log(json);
*/
console.log(data);
$scope.persons = data;
});
/*..*/之间的代码留给他们说明我也试过那条路没有成功。
user.jsp
JSONArray jdata = new JSONArray();
UserRest as = new UserRest();
jdata = as.getAll();
logger.info("jdata in user.jsp "+jdata);
UserRest.class(只需粘贴我创建 JSON 的代码)
while (iter.hasNext()) {
User ut = (User) iter.next();
JSONObject jtemp = new JSONObject();
jtemp.put("user", ut.getUserName());
jtemp.put("password", ut.getPassword());
jtemp.put("profilo", ut.getProfilo());
jarray.put(jtemp);
}
return jarray;
logger.info("jdata in user.jsp "+jdata)在user.jsp
中的结果jdata in user.jsp [{"user":"aaaaaaa","password":"1111111","profile":"0"},{"user":"bbbbbbbb","password":"222222222","profile":"1"}]
如您所见,json 看起来一样,但是在浏览器中,我在控制台中调用 list_user.jsp 页面时 controller.js 中的值 "data" returns我
<? Xml version = "1.0" encoding = "utf-8"?>
我也试过 JSON.parse 或 JSON.stringify 但它不起作用。 我还在这里添加了 "track by $ index":
<tr ng-repeat = "for people track by $ index">
在 list_user.jsp 但它不起作用。
请帮助我,因为我不知道该怎么做了。
好吧,您的问题似乎是您应该调用 SERVICE,而不是 jsp。
A JSP 为您构建了一个新网页,因此它将显示:
< ? Xml version = "1.0" encoding = "utf-8"? >
尝试做一个 servlet(或使用 JAX-RS,如您所愿),而不是 jsp,并将您的逻辑放在 'doGet' 方法中(再次,或使用 JAX-RS) .
做一件简单的事,比如
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
response.getWriter().append(your working JSON properly hardcoded);
}
这种方式应该可行。然后把你的服务逻辑放在那里。
非常感谢@inigoD,解决了我的问题。 遵循新代码。
controller.js(UserRest 是 servlet)
$http({
method : 'POST',
url : 'UserRest'
}).success(function(data){
$scope.persons = data;
});
web.xml
<servlet>
<servlet-name>UserRest</servlet-name>
<servlet-class>"path application".UserRest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserRest</servlet-name>
<url-pattern>/UserRest</url-pattern>
</servlet-mapping>
UserRest.class
@Override
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try
{
JSONArray jdata = new JSONArray();
jdata = getAll();
logger.info("prima del response "+jdata);
response.setContentType("application/json");
response.getWriter().write(jdata.toString());
}
catch ( Exception ex )
{
ex.printStackTrace();
}
}
函数getAll()和我粘贴的一样,包含这段代码。
while (iter.hasNext()) {
User ut = (User) iter.next();
JSONObject jtemp = new JSONObject();
jtemp.put("user", ut.getUserName());
jtemp.put("password", ut.getPassword());
jtemp.put("profilo", ut.getProfilo());
jarray.put(jtemp);
}
return jarray;
我用 servlet 解决了问题,但我想调用 REST api。 我宁愿不要使用 servlet。 我更改我的代码。
controller.js
angular.module('inspinia')
.controller("DataTable",['$scope','$http',function($scope,$http){
$http({
method : 'GET',
url : '/api/utenti'
}).success(function(data){
$scope.persons = data;
});
web.xml
<servlet>
<servlet-name>SpringServlet</servlet-name>
<servlet-class>com.xxx.yyy.userInterface.servlet.SpringServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>SpringServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
UtentiController.class
@Path("/utenti")
@Component
@Scope("request")
public class UtentiController {
@GET
@Produces("application/json")
public JSONArray getAll() {
/* call the interface that return a json */
return jarray;
}
}
控制台中的错误是:
HTTP Status [404] – [Not Found]
Type Status Report
Message /api/utenti/
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
感谢您的帮助