【问题标题】:AngularJS submit function can't call service function more than onceAngularJS提交函数不能多次调用服务函数
【发布时间】:2015-08-08 11:26:33
【问题描述】:

我对 AngularJS 完全陌生,我正在尝试实现一个 API 来通过关键字获取业务。我希望能够在每次单击提交按钮时输入关键字、调用 API 并获取更新的列表。出于某种原因,我只能在第一次单击提交时获取数据;之后它不再调用服务函数:

edit我发现它确实调用了服务,但它只是返回404。如果我第一次可以正确调用它,为什么会出现这种情况?

app.controller('MainController', ['$scope','MyYelpAPI', function($scope, MyYelpAPI) {
    $scope.businesses = [];

    $scope.text = "business";
    $scope.inputText = "";
    $scope.submit = function() {
        $scope.inputText = $scope.text;
        MyYelpAPI.retrieveYelp('', $scope.text, function(data) {

            $scope.businesses = data.businesses;
        });
    };
}]);

为什么我不能多次调用retrieveYelp() 函数?我的服务是这样实现的:

app.factory("MyYelpAPI", ['$http', function($http) {

return {
    "retrieveYelp": function(name, keyword, callback) {
        var method = 'GET';
        var url = 'http://api.yelp.com/v2/search';
        var params = {
            callback: 'angular.callbacks._0',
            location: 'San+Francisc',
            oauth_consumer_key: '/*removed for now*/',
            oauth_token: '/*removed for now*/',
            oauth_signature_method: "HMAC-SHA1",
            oauth_timestamp: new Date().getTime(),
            oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
            term: keyword
        };
            var consumerSecret = '/*removed for now*/';
            var tokenSecret = '/*removed for now*/';
            var signature = oauthSignature.generate(method, url, params, consumerSecret, tokenSecret, { encodeSignature: false});
            params['oauth_signature'] = signature;
            $http.jsonp(url, {params: params}).success(function(data, status){
            console.log(data);
            console.log(status);
        })
            .error(function(data, status){
                console.log("error");
                console.log(data);
                console.log(status);
            });
        counter++;
        console.log(counter);
        }
}
}]);

编辑我找到了解决方案!它与回调有关 - 显然 Angular 需要 callback : angular.callbacks._number 在每次调用期间都不同。这是我改变的:

var params = {
            callback: 'angular.callbacks._' + counter,
            location: 'San+Francisc',
            oauth_consumer_key: '',
            oauth_token: '',
            oauth_signature_method: "HMAC-SHA1",
            oauth_timestamp: new Date().getTime(),
            oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
            term: keyword
        };

我仍然不完全明白为什么会这样,所以如果有人能解释一下会有所帮助!

【问题讨论】:

  • 您是否在服务中遇到任何错误,或者您可以在您的jsonp 调用中添加.error 函数
  • 第二次单击提交时确实出现错误。我不确定如何调试这个?
  • 第一步可能是将错误消息添加到您的问题中。
  • 发现它返回 404 状态。如果它第一次起作用,不知道为什么会这样?这会是一个叫喊问题吗?
  • 可以加个jsfiddle/plunkr/codepen吗?

标签: javascript angularjs


【解决方案1】:

所以我想我发现了自己的问题 - 每次发送请求时我都需要不同的回调,所以我改变了这个:

callback: 'angular.callbacks._' + counter,

现在它可以工作了。我读到我应该可以使用

callback: 'JSON_CALLBACK'

但由于某种原因不起作用,我必须在最后手动增加数字。

如果有人能准确解释为什么那会很棒!

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2015-07-12
    相关资源
    最近更新 更多