【问题标题】:How to dynamically display ALL data from AJAX call using AngularJS?如何使用 AngularJS 动态显示来自 AJAX 调用的所有数据?
【发布时间】:2018-12-12 12:42:00
【问题描述】:

我正在尝试通过我的 Web API 按餐厅名称进行搜索,然后显示与该名称匹配的所有结果。

我必须使用 AngularJS。我可以让它手动显示,但我如何让它动态显示所有数据而不仅仅是一个?

我知道我必须使用 $.each() 来获取每个数据结果,但它只是不起作用。

var app = angular.module('restaurant', []);

function RestaurantsController($scope, $http) {

    // Create a function assigned to btnSearch's click event (ng-click).
    $scope.search = function (searchName) {

        var rName = $scope.searchName;
        var restName = $("#txtRestaurant").val();
        var restaurant = new Object();

        var strURL = "http://localhost:56475/api/Restaurants/GetByName/" + restName;

        //scope this
        var valid = true;
        var field = $scope.searchName;
        if (field == undefined) {
            alert("Please enter a valid name.");
            valid = false;
        } else {

            //.restaurantName has to match the parameter in my web service method
            restaurant.name = rName;
            restaurant = JSON.stringify(restaurant);

            // Configure the request by creating a JavaScript object with the necessary properties
            // and values for the request.
            var request = {
                method: "Get",
                url: strURL,
                headers: {  // object containing header type as properties.
                    'Content-Type': "application/json; charset=utf-8",
                },
                data: restaurant // input parameter sent as JSON object.
            };

            // Setup and send an AJAX request that sends a search term 
            // used by the Web API to find a team.
            $http(request).
                then(function (response) {  // success callback function
                    console.log(response);
                    $scope.restaurants = response.data;

                    var restaurants = response.data;

                    $.each(restaurants, function (index, restaurants) {
                        $("searchResults").append("<p>".concat("Restaurant ID: ", restaRestaurantID,
                            "<br>Restaurant Name: ", restaurants.RestName, "<br>Location: ", restaurants.RestAddr,
                            "<br>Star Rating: ", restaurants.StarRating, "<br>Price Rating: ", restaurants.PriceRating,
                            "<br>Restaurant : <br> <img src=", restaurants.ImageURL, " /><br>Cuisine: ", restaurants.Cuisine,
                            "<br>Average Rating: ", restaurants.AvgRating, "</p>"));
                    });
                },
                    function (response) {   // error callback function
                        alert("ERROR: " + response.data);
                    });
        }
    };
}

app.controller('RestaurantsController', RestaurantsController);

【问题讨论】:

  • 尝试使用 angular.forEach(restaurants, function(restaurant, index){ }); 进行循环。
  • 如果您使用 Angular,为什么要使用 $("searchResults").append$.each。见ng-repeatdocs.angularjs.org/api/ng/directive/ngRepeat

标签: angularjs ajax asp.net-web-api


【解决方案1】:

所以你想循环来自 js 文件的所有数据并想追加数据。

   var restaurants = response.data;
       $.each(restaurants, function (index, restaurants) {
          $("#searchResults").append("<p>".concat("Restaurant ID: ", 
           restaRestaurantID,"<br>Restaurant Name: ", restaurants.RestName, " 
             <br>Location: ", restaurants.RestAddr,"<br>Star Rating: ", 
             restaurants.StarRating, "<br>Price Rating: ", restaurants.PriceRating," 
             <br>Restaurant : <br> <img src=", restaurants.ImageURL, " /><br>Cuisine: 
             ", restaurants.Cuisine,"<br>Average Rating: ", restaurants.AvgRating, " 
           </p>"));
   });

添加确认您的 html 文件具有以“searchResults”作为 ID 的标签。 希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    为响应定义一个范围变量,然后在 html 中添加 ng-repeat。

       Eg: ` var request = {
                method: "Get",
                url: strURL,
                headers: {  // object containing header type as properties.
                    'Content-Type': "application/json; charset=utf-8",
                },
                data: restaurant // input parameter sent as JSON object.
            };
    
            // Setup and send an AJAX request that sends a search term 
            // used by the Web API to find a team.
            $http(request).
                then(function (response) {  // success callback function
                    console.log(response);
                    $scope.restaurants = response.data;
    
                    //var restaurants = response.data;
                    $scope.searchResult = response.data;
    
                },
                    function (response) {   // error callback function
                        alert("ERROR: " + response.data);
                    });`
    

    并在您的 HTML PAGE 中添加“ng-repeat”以循环结果。然后您将根据搜索关键字获得所有结果。

    【讨论】:

    • 我不想使用 ng-repeat。我想在ajax回调函数中动态填充数据。
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2016-05-27
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多