【问题标题】:AngularJS Restful web services: it doesn't take attributes from a json textAngularJS Restful Web 服务:它不从 json 文本中获取属性
【发布时间】:2017-04-17 19:57:56
【问题描述】:

我在使用从以下网址下载的 AngularJS Restful Web 服务示例时遇到问题:http://www.java2blog.com/2016/03/angularjs-restful-web-service-example.html 它不显示从“http://localhost:8080/AngularjsJAXRSCRUDExample/rest/countries”中的控制器创建的 json 文件的元素。这个控制器完美地工作。 我不明白问题出在哪里,事实上,当我通过服务器('http://localhost:8080/AngularjsJAXRSCRUDExample/rest/countries/angularJSCrudExample.html')运行这个 html-angularjs 文件时,它向我显示了这个: http://imgur.com/a/aEyqOhttp://imgur.com/a/wNm5j

ie 不会从 json 中的文本中提取数据。

它应该是这样的: http://imgur.com/a/Pyqzt 但是,这是 angularJSCrudExample.html:

<html>  
  <head>    

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.js"></script>  
  
<title>AngularJS $http Rest example</title>    
 <script type="text/javascript">  
        var app = angular.module("CountryManagement", []);  
       
        //Controller Part  
        app.controller("CountryController", function($scope, $http) {  
       
             
            $scope.countries = [];  
            $scope.countryForm = {  
                id : -1,  
                countryName : "",  
                population : ""  
            };  
       
            //Now load the data from server  
            _refreshCountryData();  
       
            //HTTP POST/PUT methods for add/edit country   
            // with the help of id, we are going to find out whether it is put or post operation  
              
            $scope.submitCountry = function() {  
       
                var method = "";  
                var url = "";  
                if ($scope.countryForm.id == -1) {  
                    //Id is absent in form data, it is create new country operation  
                    method = "POST";  
                    url = 'rest/countries';  
                } else {  
                    //Id is present in form data, it is edit country operation  
                    method = "PUT";  
                    url = 'rest/countries';  
                }  
       
                $http({  
                    method : method,  
                    url : url,  
                    data : angular.toJson($scope.countryForm),  
                    headers : {  
                        'Content-Type' : 'application/json'  
                    }  
                }).then( _success, _error );  
            };  
       
            //HTTP DELETE- delete country by Id  
            $scope.deleteCountry = function(country) {  
                $http({  
                    method : 'DELETE',  
                    url : 'rest/countries/' + country.id  
                }).then(_success, _error);  
            };  
   
         // In case of edit, populate form fields and assign form.id with country id  
            $scope.editCountry = function(country) {  
                
                $scope.countryForm.countryName = country.countryName;  
                $scope.countryForm.population = country.population;  
                $scope.countryForm.id = country.id;  
            };  
       
            /* Private Methods */  
            //HTTP GET- get all countries collection  
            function _refreshCountryData() {  
                $http({  
                    method : 'GET',  
                    url : 'http://localhost:8080/AngularjsJAXRSCRUDExample/rest/countries'  
                }).then(function successCallback(response) {  
                    $scope.countries = response.data;  
                }, function errorCallback(response) {  
                    console.log(response.statusText);  
                });  
            }  
       
            function _success(response) {  
                _refreshCountryData();  
                _clearFormData()  
            }  
       
            function _error(response) {  
                console.log(response.statusText);  
            }  
       
            //Clear the form  
            function _clearFormData() {  
                $scope.countryForm.id = -1;  
                $scope.countryForm.countryName = "";  
                $scope.countryForm.population = "";  
              
            };  
        });  
    </script>  
    <style>  
         
   .blue-button{  
 background: #25A6E1;  
 filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#25A6E1',endColorstr='#188BC0',GradientType=0);  
 padding:3px 5px;  
 color:#fff;  
 font-family:'Helvetica Neue',sans-serif;  
 font-size:12px;  
 border-radius:2px;  
 -moz-border-radius:2px;  
 -webkit-border-radius:4px;  
 border:1px solid #1A87B9  
       }       
  
   .red-button{  
background: #CD5C5C;  
  
padding:3px 5px;  
color:#fff;  
font-family:'Helvetica Neue',sans-serif;  
font-size:12px;  
border-radius:2px;  
-moz-border-radius:2px;  
-webkit-border-radius:4px;  
border:1px solid #CD5C5C  
       }        
  
   table {  
       font-family: "Helvetica Neue", Helvetica, sans-serif;  
       width: 50%;  
   }  
  
   caption {  
       text-align: left;  
       color: silver;  
       font-weight: bold;  
       text-transform: uppercase;  
       padding: 5px;  
   }  
  
   th {  
       background: SteelBlue;  
       color: white;  
   }  
  
  
   tbody tr:nth-child(even) {  
       background: WhiteSmoke;  
   }  
  
   tbody tr td:nth-child(2) {  
       text-align:center;  
   }  
  
   tbody tr td:nth-child(3),  
   tbody tr td:nth-child(4) {  
       text-align: center;  
       font-family: monospace;  
   }  
  
   tfoot {  
       background: SeaGreen;  
       color: white;  
       text-align: right;  
   }  
  
   tfoot tr th:last-child {  
       font-family: monospace;  
   }  
  
   td,th{  
        border: 1px solid gray;  
        width: 25%;  
        text-align: left;  
        padding: 5px 10px;  
    }  
        
          
          
    </style>  
<head>  
<body ng-app="CountryManagement" ng-controller="CountryController">  
     <h1>  
       AngularJS Restful web services example using $http  
    </h1>   
    <form ng-submit="submitCountry()">  
        <table>  
             
            <tr>  
                <th colspan="2">Add/Edit country</th>  
             </tr>  
            <tr>  
                <td>Country</td>  
                <td><input type="text" ng-model="countryForm.countryName" /></td>  
            </tr>  
            <tr>  
                <td>Population</td>  
                <td><input type="text" ng-model="countryForm.population"  /></td>  
            </tr>  
            <tr>  
                <td colspan="2"><input type="submit" value="Submit" class="blue-button" /></td>  
            </tr>  
        </table>  
    </form>  
    <table>  
        <tr>  
            
            <th>CountryName</th>  
            <th>Population</th>  
            <th>Operations</th>  
             
        </tr>  
   
        <tr ng-repeat="country in countries">  
             
<td> {{ country.countryName }}</td>  
<td >{{ country.population }}</td>    
              
            <td><a ng-click="editCountry(country)" class="blue-button">Edit</a> | <a ng-click="deleteCountry(country)" class="red-button">Delete</a></td>  
        </tr>  
   
    </table>  
   
     
   
     
    
  </body>  
</html>  

这是我的服务类,名为:CountryService.java

package org.arpit.java2blog.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.arpit.java2blog.bean.Country;
import org.arpit.java2blog.exception.CountryNotFoundException;

/*
 * It is just a helper class which should be replaced by database implementation.
 * It is not very well written class, it is just used for demonstration.
 */
public class CountryService {

	static HashMap<Integer,Country> countryIdMap=getCountryIdMap();


	public CountryService() {
		super();

		if(countryIdMap==null)
		{
			countryIdMap=new HashMap<Integer,Country>();
			// Creating some object of countries while initializing
			Country indiaCountry=new Country(1, "India",10000);
			Country chinaCountry=new Country(4, "China",20000);
			Country nepalCountry=new Country(3, "Nepal",8000);
			Country bhutanCountry=new Country(2, "Bhutan",7000);


			countryIdMap.put(1,indiaCountry);
			countryIdMap.put(4,chinaCountry);
			countryIdMap.put(3,nepalCountry);
			countryIdMap.put(2,bhutanCountry);
		}
	}

	public List<Country> getAllCountries()
	{
		List<Country> countries = new ArrayList<Country>(countryIdMap.values());
		return countries;
	}

	public Country getCountry(int id)
	{
		Country country= countryIdMap.get(id);

		if(country == null)
		{
			throw new CountryNotFoundException("Country with id "+id+" not found");
		}
		return country;
	}
	public Country addCountry(Country country)
	{
		country.setId(getMaxId()+1);
		countryIdMap.put(country.getId(), country);
		return country;
	}

	public Country updateCountry(Country country)
	{
		if(country.getId()<=0)
			return null;
		countryIdMap.put(country.getId(), country);
		return country;

	}
	public void deleteCountry(int id)
	{
		countryIdMap.remove(id);
	}

	public static HashMap<Integer, Country> getCountryIdMap() {
		return countryIdMap;
	}

	// Utility method to get max id
	public static int getMaxId()
	{ 	 int max=0;
	for (int id:countryIdMap.keySet()) {  
		if(max<=id)
			max=id;

	}  

	return max;


	}
}

它可以正常工作,因为正确生成了一个 json 文件:http://imgur.com/a/euwJz

angularJSCrudExample.html 应该取上面 json 文本的元素,看看这个字符串:

<td> {{ country.countryName }}</td>
<td >{{ country.population }}</td>  

这应该取上图json文本的元素,这个:

[{"id":1,"countryName":"India","population":10000},{"id":2,"countryName":"Bhutan","population":7000},{"id":3,"countryName":"Nepal","population":8000},{"id":4,"countryName":"China","population":20000}]

尤其需要:

INDIA 10000
BUTHAN 7000
NEPAL 8000
CHINA 20000

但它未能采用这些值

我希望有人可以帮助我。

【问题讨论】:

    标签: javascript java angularjs json rest


    【解决方案1】:

    您有“控制允许来源”问题,尝试安装“CORS Toggle”Chrome 插件。

    【讨论】:

    • 解决了!!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多