我是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
};
我仍然不完全明白为什么会这样,所以如果有人能够解释这会有所帮助!
答案 0 :(得分:2)
所以我猜我发现了自己的问题 - 每次发送请求时我都需要一个不同的回调,所以我改变了这个:
callback: 'angular.callbacks._' + counter,
现在它有效。我读过我应该可以使用
callback: 'JSON_CALLBACK'
但由于某些原因不起作用,我必须在最后手动增加数字。
如果有人能够解释为什么那会很棒!