【发布时间】: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