2015-09-09 4 views
0

Таким образом, я могу сделать первый запрос 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> 
+0

я тонкий u нужно сделать так: $ http.jsonp ("http://api.yelp.com/v2/search?callback=JSON_CALLBACK, params) .success (function() { // success }). error (function() {// failure}) ; –

+0

Добавление параметра запроса обратного вызова к URL-адресу сделало трюк. Спасибо! –

+0

отметьте это как ответ –

ответ

0

Вы должны сделать это так:

$http.jsonp("api.yelp.com/v2/search?callback=JSON_CALLBACK", yourParams) 
.success(function() { 
    //success callback 
}) 
.error(function(){ 
    //error callback 
}) ; 

 Смежные вопросы

  • Нет связанных вопросов^_^