AngularJS提交功能不能多次调用服务功能

时间:2015-08-01 11:20:31

标签: javascript angularjs

我是AngularJS的新手,我正在尝试通过关键字实现API来获取业务。我希望每次单击“提交”按钮时都能输入关键字,调用API并获取更新列表。出于某种原因,我只能在第一次点击提交时获取数据;之后它不再调用服务功能:

编辑我发现它确实调用了该服务,但它只返回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需要回调: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
        };

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

1 个答案:

答案 0 :(得分:2)

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

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

现在它有效。我读过我应该可以使用

callback: 'JSON_CALLBACK'

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

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