Angularjs jsonp возвращает данные

console.log в вызове успеха вернет данные, которые я хочу, но когда я помещу их в someValue, они станут неопределенными вне функции успеха.

Единственный способ, которым я смог успешно получить данные из этого, - это вызов успеха, если я вставлю его в массив, а затем он станет неуклюжим многомерным массивом. Я знаю, что должен быть более простой способ получить эти данные, которые мне не хватает.

$scope.someValue;

$http.jsonp(url) 
  .success(function(data){
     console.log("Data = ", data);
     //this returns the data I'm looking for

     $scope.someValue = data;
 });

console.log("Data = ", $scope.someValue);
// this returns undefined

person Darth Vanderpool    schedule 02.03.2015    source источник
comment
Почему бы вам не добавить свою data зависимую логику в обратный вызов успеха? Почему вы хотите получить доступ к data сразу после вызова $http?   -  person Andrei CACIO    schedule 02.03.2015
comment
Вам придется поместить любую логику, которая нуждается в этих данных, в обратном вызове успеха. Или вы можете вызывать функции в обратном вызове, которые будут делать что-то с этими данными. Я бы не стал использовать $watch, в большинстве случаев это не обязательно и имеет много накладных расходов.   -  person ribsies    schedule 03.03.2015
comment
если я использую jsonp на заводе, какой самый простой способ вернуть данные на мой контроллер? Или я должен просто избегать использования его в контроллере?   -  person Darth Vanderpool    schedule 04.03.2015


Ответы (2)


Используйте $watch, потому что данные изначально не определены, пока не будет вызван успех.

$scope.$watch('someValue',function(newVal){
       if(typeof newVal !='undefined'){
         $scope.someValue =newVal
       }
})
person squiroid    schedule 02.03.2015

попробуй $scope.someValue = data.data;

не уверен, как выглядит ваш возврат json, но обычно он будет иметь объект данных, поэтому вы должны использовать данные, возвращенные вашей функцией, и объект данных в коде json.

person Thomas Roberts    schedule 19.03.2015