2010-07-12 24 views
57

getJSON() isteği yapmam gerekiyor, ancak yetkilendirmeyi ve özel başlıklarını nasıl geçebilirim?İstek başlıklarını jQuery's getJSON() yöntemiyle nasıl geçirebilirim?

İstek üstbilgisinin adı aldığını, ancak DEĞİL değerlerini alıyorum. URL, toplayıcının GET/Url yerine seçenek olarak eklenmesiyle ilgili manuel bir istekle gösterilmektedir.

İşte yapmaya çalıştığımız şeyin bir örneği kemancıda iyi çalışır; bunu AJAX işleviyle nasıl çoğaltabilirim?

GET /Service.svc/logins/gdd53535342/houses/vxcbdfsdg/people/dsgsdggd?format=json HTTP/1.1 
User-Agent: Fiddler 
Authorization: Basic rgbg423535fa23y4436 
X-PartnerKey: df3fgeg-g5g6-b55b-f3d2-dsgg353523 
Host: 154.34.53.54:2757 

JavaScript kodu:

Kemancı Normal Talebi Başlıkları

xhr = new XMLHttpRequest(); 

$(document).ready(function() { 
    $.ajax({ 
    url: 'http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json', 
    type: 'GET', 
    datatype: 'json', 
    success: function() { alert("Success"); }, 
    error: function() { alert('Failed!'); }, 
    beforeSend: setHeader  
    }); 
}); 

function setHeader(xhr) { 
    xhr.setRequestHeader('Authorization', 'Basic faskd52352rwfsdfs'); 
    xhr.setRequestHeader('X-PartnerKey', '3252352-sdgds-sdgd-dsgs-sgs332fs3f'); 
} 
:

GET /service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1 
User-Agent: Fiddler 
Authorization: Basic faskd52352rwfsdfs 
X-PartnerKey: 3252352-sdgds-sdgd-dsgs-sgs332fs3f 
Host: localhost:437 

Kemancı Ajax() sayesinde Talebi Başlıkları: $ .GetJSON() yöntemi

OPTIONS service.svc/logins/jeffrey/house/fas6347/devices?format=json HTTP/1.1 
Host: localhost:437 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Proxy-Connection: keep-alive 
Origin: http://ipv4.fiddler:61975 
Access-Control-Request-Method: GET 
Access-Control-Request-Headers: authorization,x-partnerkey 
+1

Bir JSONP hizmet için yapıyoruz, ekstra başlıklarını belirleyemezsiniz. – Pointy

+0

sadece normal bir json yok. – Berty

cevap

69

İstek başlıklarını iletmek için $ .ajax işlevini kullanmanız gerekecek sunetolara katılıyorum. Bunu yapmak için, $ .ajax() seçeneklerinden biri olan beforeSend olay işleyicisi için bir işlev yazmanız gerekir.

  • Güvenlik Kodu: Yukarıdaki kod çalıştırmasına ve Fiddler gibi bir araç trafiği izlerseniz

    <html> 
        <head> 
        <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 
        <script type="text/javascript"> 
         $(document).ready(function() { 
         $.ajax({ 
          url: 'service.svc/Request', 
          type: 'GET', 
          dataType: 'json', 
          success: function() { alert('hello!'); }, 
          error: function() { alert('boo!'); }, 
          beforeSend: setHeader 
         }); 
         }); 
    
         function setHeader(xhr) { 
         xhr.setRequestHeader('securityCode', 'Foo'); 
         xhr.setRequestHeader('passkey', 'Bar'); 
         } 
        </script> 
        </head> 
        <body> 
        <h1>Some Text</h1> 
        </body> 
    </html> 
    

    , geçirilen iki istek başlıklarını göreceksiniz: İşte bunu nasıl hızlı bir örnek var Bar

değeriyle Foo

  • Şifre anahtarı değeriyle setHeader fonksiyonu da $ .ajax seçeneklerinde satır içi olabilir, ama ben bunu aramak istedim.

    Bu yardımcı olur umarız!

  • +0

    Lütfen orjinal gönderiye yapılan değişiklikleri gözden geçirin (Yeni Soru) – Berty

    +2

    Sorunu anladığımdan emin değilim. Başlık anahtarı/değerleri, URL'nin bir parçası olarak değil, seçenek olarak (söylediğin gibi) hizmete geçirilmelidir. X-PartnerKey ve Yetkilendirmeyi, örnek olarak 'securityCode' ve 'passkey' (benim oluşturduğum sadece başlıklar olan) örneğiyle ayarlarsınız. $ .ajax çağrısını yaptığınızda Host ve User-Agent ayarlanmalıdır. Sorunu düzgün bir şekilde anlamadığım için üzgünüz.Kaynak kodunuz varsa, lütfen gönderin ve belki bu yardımcı olacaktır. Teşekkürler! –

    +1

    İstek başlıklarını örnekler için yaptığınız gibi ayarladım, ancak bunu çalıştırdıktan ve kemancıdan görüntüledikten sonra, başlıkların adları görünür, ancak değerler değil. Ayrıca kemancıda GET/URL olarak görüntülenecek bir GET yapmaya çalışıyorum ama eğer GET olarak ayarladığımda OPTIONS/URL olarak görünüyor. Umarım daha mantıklıdır. Kaynak kodu göndereceğim ama neredeyse sizinkiyle aynı. Tekrar teşekkürler – Berty

    12

    olduğunu sho rthand, bunun gibi gelişmiş seçenekleri belirtmenize izin vermez. Bunu yapmak için, tam $ .ajax() yöntemini kullanmanız gerekir. http://api.jquery.com/jQuery.getJSON/ de belgelerinde Bildirimi, "Bu eşdeğerdir bir kısaltmadır Ajax fonksiyonu vardır:"

    $.ajax({ 
        url: url, 
        dataType: 'json', 
        data: data, 
        success: callback 
    }); 
    

    Dolayısıyla, sadece $ .ajax() kullanın ve ihtiyacınız olan tüm ek parametreler sağlamaktadır.

    24

    böyle() Eğer getJSON başlıklarını ayarlamak ve hala kullanabilirsiniz düşünüyorum:

    $.ajaxSetup({ 
        headers : { 
        'Authorization' : 'Basic faskd52352rwfsdfs', 
        'X-PartnerKey' : '3252352-sdgds-sdgd-dsgs-sgs332fs3f' 
        } 
    }); 
    $.getJSON('http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json', function(json) { alert("Success"); }); 
    
    +2

    Dokümanlardan (http://api.jquery.com/jquery.ajaxsetup/): "Kullanımı önerilmez." –

    +3

    @ matt-burns, doğru. Benim çözümüm, her jquery ajax isteğinin üstbilgilerde bu iki değere sahip olmasına neden olur. Bence bu durumda zararsızdır. URL'yi veya istek türünü ayarlamak için ajaxSetup() kullanıyorsanız, potansiyel olarak sorun yaşarsınız. Ben cesaret kırıcam. Farkında olmak için bir şey. –

    +1

    Benim durumumda aslında tüm getJSON çağrıları için aynı üstbilgiyi kullanmak zorundayım, bu benim için iyi bir çözümdür :) – marlar

    İlgili konular