6

angulaire 1.6 de http.jsonp $ ne joue pas bien avec l'API des feuilles google:

Je suis en train de chercher et récupérer mes données à partir de feuilles google, avec les éléments suivants:

var callback; 
app.controller("meetingsTable", function ($scope, $http, $sce) { 

var url = "http://spreadsheets.google.com/a/google.com/tq"; 
var trustedUrl = $sce.trustAsResourceUrl(url); 
var key = 'MY_KEY'; 
var tq = 'select%20*%20limit%2010'; 
var tqx = 'responseHandler:callback'; 
var params = { 
    key: key, 
    tq: tq, 
    status: 'ok', 
    tqx: tqx 
}; 

callback = function (response) { 
    console.log(response); // entering here, not to the promise 
    return response; 
} 


    $http.jsonp(trustedUrl, { params: params }).then(function (response) { 
     console.log(response); 
     retrun; 
     //success things go here 
    }, function (response) { 
     //error things go here 
    }); 
}); 

Je succčs manged pour obtenir les données des feuilles, à l'aide d'une fonction (rappel), avec un js vnila, par quand j'ai essayé avec angulaire, je suis un " objet google.visualization.Query.setResponse "dans les sources, avec l'erreur de la console: Uncaught ReferenceError: google n'est pas défini.

La chose la plus ennuyante - la promesse ne reçoit pas la réponse, et je ne peux pas mettre à jour les valeurs de ma table ansyc. J'ai essayé tout ce que je pouvais penser (et toutes les suggestions en stackoverflow), choses que j'essayé:

  1. passage de l'URL comme il est, sans params, cuase MyaBe le sce.trustAsResourceUrl $ a besoin de l'ensemble url.
  2. passant sans $ sce (fonctionne dans vanila js, pas ici).
  3. nommant ma fonction de succès de promesse comme "callback".
  4. en vérifiant que toutes les valeurs de l'API des feuilles sont présentes (encore une fois, fonctionne avec vanila).
  5. appelant "callback" à l'intérieur de la promesse, en l'entrant comme une fonction à l'intérieur de la promesse.
  6. obtenir tout le jsonp dans une fonction qui renvoie la réponse, avec & sans la fonction de rappel.
  7. supprimer le rappel du paramètre "tqx = responseHandler: callback" tout ensemble.
  8. passer la promesse en tant que rappel dans le paramètre tqx.
  9. en utilisant le 1.5 < "JSON_CALLBACK", qui ne fonctionne pas avec la version 1.6.
  10. faire la demande avec le vanila js, puis de le passer à l'automate (ne fonctionne pas).

Si je me souviendrai de plus de choses, je vais mettre à jour ci-dessous.

s'il vous plaît, quelqu'un peut-il comprendre quel est le problème? VRAIMENT apprécier, Merci, Yoav.

Répondre

1

répondre à ma propre question:

si les gars vous avez le même problème, utilisez la propriété de angulaire $scope.$apply. c'est une propriété pas si bien documentée dans l'API d'Angular, donc voici un joli guide pour quand appliquer comment appliquer, avec un bel exemple. Ma mise en œuvre:

$scope.tableContentData; 
callback = function (response) { 
    $scope.$apply(function() { 
     $scope.tableContentData = response; 
    }); 
}; 
$http.jsonp(trustedUrl).then(function() { 
     //success stuff 
    }, function() { 
     //error stuff 
    }); 

quand je déclare le rappel en dehors de mon contrôleur.

C'était un cauchemar.

Merci pour les votes de toute façon!