【问题标题】:AJAX (JSON) problems with NGRepeatNGRepeat 的 AJAX (JSON) 问题
【发布时间】:2015-07-09 13:24:27
【问题描述】:

我在将我的 JSON 从服务器 (Node.js) 输出到 Ngrepeat 时遇到问题。

我已经尝试了很多,并使用 Firebug 和 Firefox Web Inspector 进行了调试。

由于某种原因,它不会显示来自 JSON 的数据,即使当我在 Firebug 控制台(使用 Firefox 39.0)中输出 JSON 时,它看起来也是正确的。

JSON:

[{ nr:"1", svenska:"test2", spanska:"testo2"},{ nr:"2", svenska:"test3", spanska:"testo3"},{ nr:"3", svenska:"test4", spanska:"testo4"},{ nr:"4", svenska:"test5", spanska:"testo5"},{ nr:"5", svenska:"test6", spanska:"testo6"}]

Angular.js

    /**
     *
     * The client Angular.JS main file for the project
     */


    var glosorApp = angular.module('glosorApp',['directives']);   /* */


    angular.module('directives', [])
    .directive('toggleClass', function () {
    var directiveDefinitionObject = {
        restrict: 'A',
        template: '<div ng-click="localFunction()" ng-class="selected"    ng-transclude></div>',
        replace: false,
        scope: {
            model: '='
        },
        transclude: true,
        link: function (scope, element, attrs) {
            scope.localFunction = function () {
                scope.model.value = scope.$id;
            };
            scope.$watch('model.value', function () {
                if (scope.model.value === scope.$id) {
                    scope.selected = "active";
                } else {
                    scope.selected = '';
                }
            });
        }
    };
    return directiveDefinitionObject;
    });




    glosorApp.controller('listController', function ($scope, $http) {

       $http.post(PROJEKT_SOKVAG+'/_myroute', 
                    {type:AJAX.LISTA_GLOSOR_CLI_R}).success( function(data) {

                                console.log("Kommer hit lookdeep: "+lookdeep(data.data));   


                                $scope.glosor = data.data;
                        //      $scope.$apply();                                                    

                                console.log("Kommer hit lookdeep: $scope.glosor "+lookdeep($scope.glosor)); 

                        });       

    });





function ajaxanrop(callback, data_) {
     $.ajax({
            url: PROJEKT_SOKVAG+'_myroute',
            type: 'POST',
            dataType: 'json',
            data: data_ ,      // the data that should be sent to server
            success: function(data) { if ( callback ) callback(data); },
            error: function() { if ( callback ) callback(null); },
            complete: function() { /* console.log("Klart"); */ } 
      });   

    } 

HTML(EJS 模板)

<!DOCTYPE html>
<html ng-app="glosorApp" ng-init="model = { value: 'dsf'}">
<head>
<title>Glosor</title>

<script type="text/javascript">
var PROJEKT_SOKVAG="<%=project_path %>", LoginUser="<%= user.username %>";
</script>
<script type="text/javascript" src="http://w42.se/webbroot/js/jquery-1.9.1.min.js"></script>
<script src="http://w42.se/<%=project_path %>/jquery-ui-1.js" type="text/javascript"></script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.js"></script>    

<script type="text/javascript" src="http://w42.se<%=project_path %>/lookdeep.js"></script>
<script type="text/javascript" src="http://w42.se<%=project_path %>/constants.js"></script>
<script type="text/javascript" src="http://w42.se<%=project_path %>/clientAngular.js"></script>

</head>
<body>
<div id="vald_sida" style="display:none;" class="mentorer"></div>
<p>Anv&auml;ndarnamn: <%= user.username %></p>
<p>Email: <%= user.email %></p>

<p><a href="<%=project_path %>/_logout">Log out</a></p>

    <div id="wrapper"  ng-controller="listController" >

    <p><a href="<%=project_path %>/_laggtillglosor">L&auml;gg till Glosor</a></p>
    <p><a href="<%=project_path %>/_account">Testa Glosor</a></p>       

    <div class="clear"></div>


    <div class="list">

        <div class="filterarea">
        <h4>S&ouml;kning</h4>
            <div>       
                    <span>Nr: <input ng-model="search.nr" ng-model-options="{debounce: 20000}"></span>
                    <span>Svenska: <input ng-model="search.svenska" ng-model-options="{debounce: 20000}"></span>
                    <span>Spanske: <input ng-model="search.spanska" ng-model-options="{debounce: 20000}"></span>
                    <span>Po&auml;ng: <input ng-model="search.poang" ng-model-options="{debounce: 20000}"></span>

            </div>

        </div>
            <div class="pad clearfix">          
                <h4>Resultat</h4>       

                V&auml;lj: alla <input type="checkbox" ng-model="master"><br/> 
                  <div ng-form="">
                <div class="list">
                        <div class="thead">
                            <div>
                                <span class="sortable"><a href="" 
                                ng-click="predicate = 'nr'; reverse=!reverse">#</a></span>  
                                <span class="sortable td"><a href="" 
                                ng-click="predicate = 'svenska'; reverse=!reverse">Svenska</a></span>
                                <span class="sortable td"><a href="" 
                                ng-click="predicate = 'spanska'; reverse=!reverse">Spanska</a></span>
                                <span class="sortable td"><a href="" 
                                ng-click="predicate = 'poang'; reverse=!reverse">Po&auml;ng</a></span>                                              
                            </div>
                        </div>

                        <div class="tbody">             
                            <div ng-repeat="glosa in filter_glosor = (glosor | orderBy:predicate:reverse | filter:search)">                      
                                    <div class="tr" toggle-class="" model="model">                  
                                    <span class="td">{{glosor.nr}}</span>  
                                    <span class="td">{{glosor.svenska}}</span>
                                    <span class="td">{{glosor.spanska}}</span>  
</body>
</html>

【问题讨论】:

    标签: ajax json angularjs


    【解决方案1】:

    至于ng-repeat 问题,您似乎没有正确使用过滤器。试试这个:

    <div ng-repeat="glosa in glosor | orderBy:predicate:reverse | filter:search">
    

    注意如果您尝试获取数据,则应使用$http.get 而不是您拥有的$http.post(PROJEKT_SOKVAG+'/_myroute',

    这将在维护应用程序时避免混乱。

    【讨论】:

    • 嗯?为什么数据来自 GET 或 POST 响应很重要?
    • 对于初学者,因为它是获取数据时使用的正确 HTTP 动词。
    • 这完全取决于上下文。例如,如果请求修改数据,您应该使用 POST。
    • 是的。但是这里的上下文(尽我所能用我不知道的语言中的变量名来判断)只是请求数据。
    • 除此之外,它将如何解决手头的问题? OP 说接收到的数据没问题。因此,将其更改为 GET 不会有任何影响。
    【解决方案2】:

    嗯,我发现了我犯的错误,这是一个简单得可笑的错误。其实挺尴尬的……;-)

    我将 glosor.svenska 而不是 glosa.svenska 放在重复块中(在 NGRepeat 内)。

    数组名和元素名太相似是不好的,你可能会混淆它们。

    这意味着我将数组而不是重复的单个数组元素放在重复块中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2021-03-16
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多