2017-03-19 3 views
2

Ich bin neu in AngularJS und Webservices. Ich mache ein Programm, das Wert vom Benutzer bekommt -> [Name und Alter] und fügen Sie diese Werte in die Oracle-Datenbank ein. Ich konnte nur einen einzelnen Wert einfügen. Meine Suche nach $ http.post, um mehrere Werte zu übergeben, war nicht gut. Es wäre so hilfreich, wenn jemand helfen könnte. Hier ist der Code

Client-Seite Code

<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> 

Server Side Java-Code

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(); 
    } 


    } 

    } 

diesen Code verwenden ich nur in der Lage bin einen einzelnen Wert $ scope.name einzufügen. Wie kann ich meinen Code ändern, um sowohl $ scope.name als auch $ scope.age Parameter über $ http.post an Server zu übergeben?

+0

Eine eckige Anwendung sendet normalerweise JSON und empfängt JSON. Sie können natürlich etwas anderes senden und erhalten HTML, aber das macht es schwieriger als nötig. Warum senden und empfangen Sie JSON nicht einfach? –

+0

@JBNizet Ja ... das war alles notwendig ... –

Antwort

5

Mit diesem Code kann ich nur einen einzelnen Wert $ scope.name einfügen. Wie kann ich meinen Code ändern, um sowohl $ scope.name als auch $ scope.age Parameter über $ http.post an Server zu übergeben?

standardmäßig die $http post/get-Methoden die Anforderungen transformieren, indem die Daten als JSON Serialisierung und nach ihnen mit dem "application/json" Content-Type.
Während Sie scheinen, Ihre Daten mit dem "application/x-www-form-urlencoded" Content-Typ zu veröffentlichen.

Sie können den Inhaltstyp "application/x-www-form-urlencoded" angeben und die Daten mit dem guten Format (Hinzufügen der & Trennzeichen zwischen den Sendewerten) vor dem Senden erstellen.

Oder sonst könnten Sie einfacher machen.
Sie können ein JS-Objekt senden, das beide Informationen enthält.

$http.post('rest/DB/add',$scope.name); 

von

var postedObj = {'name':$scope.name, 'age':$scope.age} 
$http.post('rest/DB/add',postedObj); 

ersetzen und Ihre Ruhe-Controller nach ändern.

Ersetzen

public void addDetails(String sname,String sage){ 

von

public void addDetails(Details details){ 

wo Details hat wie die beiden übertragenen Werte Felder.

public class Details{ 
    private String name; 
    private String age; 

    // and add getters and setters if required by your JSON/Java mapper. 
} 
Verwandte Themen