Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS,工厂,执行POST然后获取方法_Javascript_Json_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS,工厂,执行POST然后获取方法

Javascript AngularJS,工厂,执行POST然后获取方法,javascript,json,angularjs,angularjs-scope,Javascript,Json,Angularjs,Angularjs Scope,在使用AngularJS执行REST请求时,我遇到了一些小问题。 我已经用PHP(Laravel)完成了服务器部分,我用POSTMAN对它进行了测试,它工作得很好。我只是有一个POST/expression,在那里我发送类似json的{“expression”:(2+5)”},我会得到类似json的{“expression”:(2+5)”,“result”:“7”},当我做几个POST请求时,我需要将结果连接到我的result.html页面上。我为路线提供编写了app.js,还有contolle

在使用AngularJS执行REST请求时,我遇到了一些小问题。 我已经用PHP(Laravel)完成了服务器部分,我用POSTMAN对它进行了测试,它工作得很好。我只是有一个POST/expression,在那里我发送类似json的
{“expression”:(2+5)”}
,我会得到类似json的
{“expression”:(2+5)”,“result”:“7”}
,当我做几个POST请求时,我需要将结果连接到我的result.html页面上。我为路线提供编写了app.js,还有contoller.js

//post expression
myApp.controller('expressionController', ['$scope', 'postExpressionFactory', 'getExpressionFactory','$location',
    function ($scope, postExpressionFactory,getExpressionFactory, $location) {
        $scope.postNewExpression = function () {
            $scope.results = postExpressionFactory.evaluate({'expression':$scope.expression});
            console.log($scope.results.expression);
            console.log($scope.results.result);
        };
    }]);
并在services.js中创建工厂

//post factory
myServices.factory('postExpressionFactory', ['$resource',
    function ($resource) {
        return $resource('../server.php/expression', {}, {
            evaluate: {method: 'POST', headers: {'Content-Type': 'application/json'}, isArray: false}
        });
    }]);
并具有调用此post请求的html

<form>
    <div class="row">
        <div class="col-lg-12">
            <div class="form-group">
                <label class="control-label">Enter expression</label>
                <div class="input-group">
                    <span class="input-group-addon">=</span>
                    <input class="form-control" type="text" id="expression" name="result" ng-model="expression" ng-required="true">
                    <span class="input-group-btn">
                        <button class="btn btn-default" type="button" ng-click="postNewExpression()">Calculate</button>
                    </span>
                </div>
                <h2>Results</h2>
                <div class="list-group" ng-repeat="res in results">
                    <a class="list-group-item">
                        <h4 class="list-group-item-heading">{{res.expression}}</h4>
                        <h4 class="list-group-item-heading">{{res.result}}</h4>
                    </a>
                </div>
            </div>
        </div>
    </div>
</form>

输入表达式
=
算计
结果
{{res.expression}}
{{res.result}}

Angular运行得很好,我想我没有得到正确的json,当我在mozilla->network中执行此操作时,我看到我已经完成了POST请求,我得到了json响应结果:“7”,表达式:(2+5)。如何在results.expression、results.result中获得此结果->7

您的$scope.results对象被定义为具有两个属性,但是当您在ng repeat中迭代它时,您尝试访问不存在的字符串的属性,因此它会以静默方式失败

// your results object:
$scope.results = postExpressionFactory.evaluate({'expression':$scope.expression});

// so your object looks like this:
{
    expression: something,
    result: somethingElse,
}
您尝试访问它的方式:

<div class="list-group" ng-repeat="res in results">
     <a class="list-group-item">
         <h4 class="list-group-item-heading">{{res.expression}}</h4>
         <h4 class="list-group-item-heading">{{res.result}}</h4>
     </a>
</div>

{{res.expression}}
{{res.result}}
通过打印对象查看HTML中的错误:

<div class="list-group" ng-repeat="res in results">
     {{ result }}
     <a class="list-group-item">
         <h4 class="list-group-item-heading">{{res.expression}}</h4>
         <h4 class="list-group-item-heading">{{res.result}}</h4>
     </a>
</div>

// what you probably want is an array for the results, then push onto the array
$scope.results = [];

// push
$scope.results.push(postExpressionFactory.evaluate({'expression':$scope.expression}));

{{result}}
{{res.expression}}
{{res.result}}
//您可能需要的是一个结果数组,然后推到该数组上
$scope.results=[];
//推
$scope.results.push(postExpressionFactory.evaluate({'expression':$scope.expression}));

谢谢,它正在工作。但我还有一个问题,当我做这个post请求时,我从服务器得到了另一种类型的答案,json看起来像{expression:'5+7',token:'a123'},现在我需要得到这个token值,如果token存在,我需要得到请求。我尝试了好几次,但无法访问$scope.expression.token,如果您理解我的意思,我如何执行此操作。我的逻辑是这样的:if($scope.results.expressionId!==undefined){$scope.getNewExpression=function(){$scope.results.push(getExpressionFactory.result($scope.results.expressionId));};}(我假设如果令牌存在,我必须弹出最后一个成员)