2013-05-25 20 views
5

Ben ahoo'dan api teklif almaya çalışıyorum ve angular'ın $ http.jsonp yöntemini kullanıyorum. Hedef, sonucun geri geldiğinde, uygulamanın bu rotaya gitmesini sağlamaktır: '/ stocks/show_stock'.angularjs - JSONP döndüğünde HTTPpromise çalıştırılamıyor

$location.path '/stocks/show_stock' 
: Ben deyimi koymak) JSONP tepkisini 2 sarar geri arama fonksiyonunda

window.location = '/stocks/show_stock' 

: Ben deyimi koymak iki şekilde yapmaya çalışıyor ve ne) 1 çalışır am HTTPpromise geri aramada

.

İşte (coffeescript olarak) benim kodudur (kodda yorumlara bakınız):

#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) 
    } 

şimdiden teşekkürler.

+0

sen eklememiş geri arama = JSON_CALLBACK url, url orada olduğunu http://query.yahooapis.com/v1/public/yql?callback=JSON_CALLBACK&q='+q –

+1

olmalıdır. 'q' dizesinin 6. satırı. Bahsettiğim gibi sorun değil, geri çağırma ateşi alıyorum ama window.location = '/ stocks/show_stock' o geri arama çalışmıyor. Bu yüzden httpPromise 'o zaman' işlevini kullanmaya çalıştım ama bu işe yaramadı ya da – dimitar

+0

Şimdiye kadar teşekkürler Ajay. – dimitar

cevap

1

Ben coffeescript yazmıyorum, bu yüzden javascript'e çevirdim. $location hizmetini, callback=stock_quote_callback'u callback=JSON_CALLBACK yerine yeni değiştirdiğimi ve yalnızca iyi çalışan bir plunker oluşturduğunu eklemeyi unuttunuz: http://run.plnkr.co/hCAdohIJIr9Odn3m/ (kaynak: http://plnkr.co/edit/a7C6k0QVoXnaTyImSUkb?p=preview).

angular.module('Services').service('StockSupplier', function($http,$location) { 
    var get_stock; 
    get_stock = function(symbol) { 
    var q, url; 
    q = 'select * from yahoo.finance.quotes where symbol in ("' + symbol + '")&'+ 
     'format=json&'+ 
     'diagnostics=true&'+ 
     'env=http://datatables.org/alltables.env&'+ 
     'callback=JSON_CALLBACK '; 
    url = 'http://query.yahooapis.com/v1/public/yql?q=' + q; 
    return $http.jsonp(url).then(function(data) { 
     alert('This should pop up when result returns'); 
     $location.path('/stocks/show_stock'); 
    }); 
    }; 
    return { 
    get_stock: function(symbol) { 
     return get_stock(symbol); 
    } 
    }; 
}); 
+0

Teşekkürler bir demet jo! Açısal dökümantasyonun okunması 'JSON_CALLBACK' cevabının geri döndüğü zaman icra edilmek istenen fonksiyonun isminin bir yer tutucusu olduğunu ve fonksiyonun adı olarak 'JSON_CALLBACK' kelimesini tam anlamıyla eklemem gerektiğini düşünmüştüm. Bu çözüldü. – dimitar