Таким образом, я могу сделать первый запрос JSONP для работы API yelp для возврата бизнес-данных для меня, но любые последующие запросы, которые я делаю, приводят к обратному вызову для отказа, который регистрирует код состояния 404. И все же, когда я вытягиваю вкладку сети в инструментах разработчика Chrome, я вижу, что все последующие запросы GET, которые я сделал, имеют статус 200, и я вижу действительные данные ответа. Как это могло произойти, когда был вызван обратный вызов для отказа? Как я могу это исправить? Я бы хотел получать данные более одного раза.Последующие запросы JSONP дают статус 404, несмотря на статус GET 200
Следующий код в вопросе основан ответ на этот другой вопрос Yelp API and AngularJS, разница в том, заявления непосредственно ниже комментарии
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="oauth-signature.js"></script>
</head>
<body ng-app="plunker">
<div ng-controller="MainCtrl">
<p><date-input name="info.name" message="info.message"></date-input></p>
<ul>
<li data-ng-repeat="business in businesses">
{{business.name}}
</li>
</ul>
</div>
<script>
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
return result;
}
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', 'MyYelpAPI', function($scope, MyYelpAPI) {
$scope.businesses = [];
// first time for the callback gets executed
MyYelpAPI.retrieveYelp('', function(data) {
console.log('callback1');
console.log('data');
$scope.businesses = data.businesses;
});
// the second time for the callback doesn't get executed
MyYelpAPI.retrieveYelp('', function(data) {
console.log('callback2');
$scope.businesses = data.businesses;
});
}]).factory("MyYelpAPI", function($http) {
return {
"retrieveYelp": function(name, callback) {
var method = 'GET';
var url = 'http://api.yelp.com/v2/search';
var params = {
callback: 'angular.callbacks._0',
location: 'San+Francisco',
oauth_consumer_key: '',
oauth_token: '',
oauth_signature_method: "HMAC-SHA1",
oauth_timestamp: new Date().getTime(),
oauth_nonce: randomString(32, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
term: 'food'
};
var consumerSecret = '',
var tokenSecret = '',
var signature = oauthSignature.generate(method, url, params, consumerSecret, tokenSecret, { encodeSignature: false});
params['oauth_signature'] = signature;
$http.jsonp(url, {params: params})
.success(callback)
// second time fails
// data -> undefined; status -> 404
.error(function(data, status) {
console.log(data, status); // why is this happening?
});
}
}
});
</script>
</body>
</html>
я тонкий u нужно сделать так: $ http.jsonp ("http://api.yelp.com/v2/search?callback=JSON_CALLBACK, params) .success (function() { // success }). error (function() {// failure}) ; –
Добавление параметра запроса обратного вызова к URL-адресу сделало трюк. Спасибо! –
отметьте это как ответ –