Próbuję uzyskać notowanie akcji z api yahoo i używam metody $ http.jsonp. Celem jest, gdy wynik wróci, aby aplikacja trafiła na tę trasę: "/ stocks/show_stock". Staram się zrobić to na dwa sposoby i nie działa 1) umieścić oświadczenie:angularjs - HTTPpromise nie wykonuje się, gdy JSONP jest zwracany
window.location = '/stocks/show_stock'
w funkcji zwrotnej, która zawija odpowiedź jsonp 2) umieścić oświadczenie:
$location.path '/stocks/show_stock'
w wywołaniu zwrotnym HTTPpromise. (Patrz: komentarze w kodzie)
Oto mój kod (w coffeescript):
#THIS IS THE CALLBACK FUNCTION THAT I SEND WITH THE JSONP REQUEST
window.stock_quote_callback = (data)->
console.log data #THIS WORKS AND I CAN SEE THE DATA RETURNED FROM YAHOO
window.stock_quote_result = data.results
alert 'I am in the callback'
#THE STATEMENT BELOW DOES NOT WORK EVEN THOUGH I CAN SEE THE ALERT ABOVE
window.location = '/stocks/show_stock'
angular.module('Services').service 'StockSupplier', ($http)->
get_stock = (symbol)->
q = 'select * from yahoo.finance.quotes
where symbol in ("'+symbol+'")
&format=json&
diagnostics=true&
env=http://datatables.org/alltables.env&
callback=stock_quote_callback'
url = 'http://query.yahooapis.com/v1/public/yql?q='+q
$http.jsonp(url).then (data)->
#THE CODE BELOW NEVER EXECUTES EVEN THOUGH RESULT IS RETURNED
alert 'This should pop up when result returns'
$location.path'/stocks/show_stock'
{
get_stock: (symbol)-> get_stock(symbol)
}
Z góry dziękuję.
nie został dodany callback = JSON_CALLBACK do adresu URL, adres powinien być http://query.yahooapis.com/v1/public/yql?callback=JSON_CALLBACK&q='+q –
ona tam jest. szósta linia ciągu "q". Jak już wspomniałem, nie jest to problem, że otrzymuję wywołanie zwrotne, ale okno window.location = 'stocks/show_stock' wewnątrz tego wywołania zwrotnego nie działa. Właśnie dlatego próbowałem użyć funkcji "wtedy" httpPromise, ale to nie zadziałało. – dimitar
Dzięki Ajay, teraz wiem, co masz na myśli. – dimitar