2016-04-14 17 views
0

Merhaba I vaat Ajax çağrıları ile birlikte çalışma şeklini anlamaya çalışıyorum. Belirli bir dönüm noktasına kadar basit Ajax arama göndermek istiyorum ama kod sözdizimi ile gerçekten karıştı.Ember.RSVP.Promise AJAX çağrısı

kodunun amacı kullanıcının oturumunu geçersiz şudur: İşte benim kodudur. İlk olarak, müşteri temin çıkış bitiş noktasına bir ajax arama göndermelidir kullanıcının simgesi ve ardından sunucu başarıyla yanıt verirse, biz istemci tarafında kullanıcının verilerini temizlemek için invalidate() yöntemini çağırın. ember-ajax kullanma

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    session: Ember.inject.service('session'), 

    actions: { 
     invalidateSession() { 
     const url = "http://namespace/logout/"; 
     let logoutRequest = new Ember.RSVP.Promise(function(r,e){ 
      r(this.ajax(url, "PUT", {auth_token});) 
     }, 
     if (logoutRequest) { 
      this.get('session').invalidate(); 
     } 
     } 
    } 
}); 

benim kod çalışma olmadığını bilin ama hepsini bir araya koyamazsınız ...

+0

Ajax (…) 'zaten bir söz vermiyor mu? Etrafında bir 'Promise' kurucusu koymaya gerek yok! – Bergi

+0

Ayrıca, (aynı zamanda 'Promise' çağrı atlanması ile çözülür olan) (http://stackoverflow.com/q/20279484/1048572) – Bergi

+0

Hem [geri arama this'' ile] bir sorun var gibi kesinlikle haklısın! Ben Kor. $. Ajax' 'tercih edilir' kor-ajax' hizmetini kullanma Ember ... – Jack

cevap

2

bu çalışması gerekir:

ajax: Ember.inject.service(), 
.... 
actions: { 
invalidateSession(){ 
    return this.get('ajax').request('url_goes_here', { 
     method: 'PUT', 
     data: { 
     some: "additional data" 
     }, 
    }).then(function(success) { 
     // inform about successful logout, redirect... 
    }).catch(function(error) { 
     // handle or throw error 
    }); 
    } 
} 

Güncelleme: Eğer Promises Etrafını sarın istiyorsanız , şunu deneyin: ...

@locks'dan bahsedildiği gibi, ham Ember.$.ajax()'u kullanmak yerine ember-ajax kütüphanesinin kullanılması önerilir. this.get('ajax').request() bir söz verdiğinden, artık sözlerin etrafına sarılmasına gerek yok.

Ancak, tek yapmanız gereken çıkış yapmaksa, ileride gereksinim duyabileceğiniz birçok özelliği çözdüğünüz ember-simple-auth kitaplığına (addon) göz atmanızı öneririm (oturum açma, oturum kapatma, geçersiz kılma, yönlendirmenin yeniden yönlendirilmesi) rota...).

+1

yılında RSVP.Promise kullanması gerektiğini düşündük. – locks

0

Böyle this.ajaxfrom a callback kullanamaz. ajax(…) zaten bir döndüğünde bir new Promise gerekmez Fakat bu yine de gereksiz. Yani sadece

invalidateSession() { 
    const url = "http://namespace/logout/"; 
    let logoutRequestPromise = this.ajax(url, "PUT", {auth_token}); 
    return logoutRequestPromise.then((logoutRequestResult) => { 
     if (…) { 
      this.get('session').invalidate(); 
     } 
    }); 
} 
İlgili konular