我是AngularJS和Web服务的新手。我正在做一个程序,它从用户>[名称和年龄]获取值并将这些值插入oracle数据库。我只能插入一个值。我搜索使用 $http.post 传递多个值的结果并不好。如果有人能帮忙,那将是非常有帮助的。这是代码
客户端代码
<html>
<title>My AngularJS App</title>
<body ng-app="myApp" ng-controller="DBCtrl">
<script type ="text/javascript" src="https://ajax.googleapis.co/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
<form ng-submit="insertData()">
Student name: <input type = "text" ng-model="name" >
Student age: <input type= "text" ng-model="age">
<br>
<input type ="submit" value="INSERT">
</form>
<p>{{msg}}</p>
<script>
var app = angular.module('myApp',[]);
app.controller('DBCtrl', function($scope,$http){
$scope.insertData = function(){
alert($scope.name);
$http.post('rest/DB/add',$scope.name)
//$http.get("rest/DB/extract")
.success(function(){
$scope.msg="DATA INSERTED";
})
}
});
</script>
</body>
</html>
服务器端 Java 代码
package com.ustri.DBman;
@Path("/DB")
public class DBManager {
@POST
@Path("/add")
@Produces(MediaType.TEXT_HTML)
public void addDetails(String sname,String sage){
System.out.println("IN add");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
//step3 create the statement object
System.out.println("Connection established successfully");
PreparedStatement stmt=con.prepareStatement("insert into studreg values(?,?)");
System.out.println(sname+"+"+sage);
stmt.setString(1,sname);
stmt.setString(2,sage);
int i=stmt.executeUpdate();
System.out.println(i+" records inserted");
con.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用此代码,我只能插入单个值 $scope.name。如何修改我的代码以将 $scope.name 和 $scope.age 参数通过 $http.post 传递到服务器?
使用此代码,我只能插入单个值 $scope.name。 如何修改我的代码以传递 $scope.name 和 $scope.age 参数通过 $http.post 到服务器?
默认情况下,$http
post/get 方法将数据序列化为 JSON 并使用 "application/json"
内容类型发布请求来转换请求。
虽然您似乎想以"application/x-www-form-urlencoded"
内容类型发布数据。
您可以指定"application/x-www-form-urlencoded"
内容类型,并在发送数据之前使用正确的格式创建数据(在传输值之间添加&
分隔符(。
或者你可以做更简单的事情。
您可以发送包含这两个信息的 JS 对象。
取代
$http.post('rest/DB/add',$scope.name);
由
var postedObj = {'name':$scope.name, 'age':$scope.age}
$http.post('rest/DB/add',postedObj);
并根据需要更改您的 REST 控制器。
取代
public void addDetails(String sname,String sage){
由
public void addDetails(Details details){
其中Details
将两个传输的值作为字段。
public class Details{
private String name;
private String age;
// and add getters and setters if required by your JSON/Java mapper.
}