2012-11-29 25 views
5

YILA'yı Yii'ye entegre etmeye çalışıyorum ve bu nedenle REST'e ihtiyacım var. Bu yüzden, isteklere iletilmesi gereken bir kullanıcı adı ve parola kullanan bir Yii uzantısı, restfullyii yükledim. Sorun şu ki, bunu Backbone ile nasıl yapacağımızı bilmiyorum.Özel HTTP üstbilgileri RESTful isteklerine iletme

aranan istek örneği: Tamamen mantıklı

List 
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/  
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/limit/1 
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/limit/10/5 (limit/offeset) 

Güncel hata yanıtı ..:

{ 
    "success": false, 
    "message": "You are not authorized to proform this action.", 
    "data": {"errorCode":500} 
} 

herkes nasıl Omurga boyunca böyle değerleri göndermek için bir ipucu var mı?

cevap

2

Omurga, XHR isteklerini jQuery/Zepto'ya atar, değiştirmeniz gereken budur.

kolay çözüm $.ajaxSetup ile varsayılan seçenek temin etmek üzere, muhtemelen ve headers options

başlıkları
Standart (1.5) eklendi: {} ek başlık anahtar/değer çiftleri

bir harita talebi ile birlikte gönderilir. Bu ayar, beforeSend işlevi çağrılmadan önce ayarlanır; bu nedenle, üstbilgi ayarındaki tüm değerlerin beforeSend işlevi içinde 'dan üzerine yazılabilir.

Böyle ayarlayın olacaktır:

$.ajaxSetup({ 
    headers:{ 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    } 
}); 

özel başlıkları olacak gönderilen her isteği. http://jsfiddle.net/nikoshr/j5Rr4/

Bkz Yoksa her isteklerine ek seçenekler geçebileceği, Backbone jQuery'ye iletecek: Son olarak

var m = new Backbone.Model(); 
m.fetch({ 
    headers:{ 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    } 
}); 

http://jsfiddle.net/nikoshr/j5Rr4/2/

, her istek için başlıkları eklemek için Backbone.sync geçersiz olabilir :

Backbone.realsync = Backbone.sync; 
Backbone.sync = function(method, model, options) { 
    options || (options = {}); 
    options.headers = { 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    }; 

    return Backbone.realsync.call(model, method, model, options); 
}; 

var m = new Backbone.Model(); 
m.fetch(); 

http://jsfiddle.net/nikoshr/j5Rr4/4/

+0

İlk seçenek işe yaramıyor hiçbir başlık eklenmeyecek, ama güzel bir çaba oldu. İkinci seçenek benim için geçerli değil çünkü bir koleksiyon getiriyorum ve bir modeli kaydetmiyorum. Bunun için de bir önerin var mı? –

+0

@SjaakRusma Bir getirme ile değiştirildi, ancak bu tam olarak $ .ajaxSetup ile aynı şeyi yapar: isteğe özel başlık ekleyin. Bilmeceleri bir konsolla inceleyin ve bu ekstra başlıkları görmelisiniz. – nikoshr

+0

Ajaxoptions çalışmadı, ikinci düzenleme seçeneği m.fetch ({..}); m, Koleksiyon, İŞ! Teşekkürler! –

İlgili konular