2010-07-12 2 views
57

getJSON() 요청을해야하지만 승인 헤더와 맞춤 헤더를 전달하려면 어떻게해야합니까?jQuery의 getJSON() 메소드로 요청 헤더를 전달할 수 있습니까?

요청 헤더가 이름을 취하고 있지만 값이 아니라는 문제가 나타납니다. URL이 피들러에서 GET/Url 대신에 옵션으로 삽입되는 수동 요청을 통해 표시됩니다.

다음은 우리가하려고하는 것의 예가 피 들러에서 잘 작동하는 것입니다. 어떻게 이것을 AJAX 함수로 복제 할 수 있습니까?

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 

자바 스크립트 코드 :

는 가 이

피들러 일반 요청 헤더

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 

피들러 Ajax()를 통해 요청 헤더 다음 $ .getJSON() 메소드는

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

당신은 JSONP 서비스를 위해이 일을하는 경우, 당신은 여분의 헤더를 설정할 수 없습니다. – Pointy

+0

정상적인 json 일뿐입니다. – Berty

답변

69

요청 헤더를 전달하기 위해 $ .ajax 함수를 사용해야한다는 Sunetos에 동의합니다. 이를 위해서는 $ .ajax() 옵션 중 하나 인 beforeSend 이벤트 핸들러에 대한 함수를 작성해야합니다.

  • securityCode : 위의 코드를 실행 피들러와 같은 도구에서 트래픽을 볼 경우

    <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> 
    

    , 당신은 전달이 요청 헤더를 볼 수 있습니다 : 여기에 있음을 수행하는 방법에 대한 빠른 샘플입니다 바

의 값을 푸

  • 암호 키의 값으로 setHeader 기능도 $ 아약스 옵션에서 인라인 될 수 있지만, 나는 그것을 불러 싶었다.

    희망이 도움이됩니다.

  • +0

    원래 게시물의 변경 사항을 확인하십시오. (새로운 질문) – Berty

    +2

    문제를 잘 모르겠습니다. 헤더 키/값은 URL의 일부가 아닌 옵션으로 전달되어야합니다 (앞에서 말한 것처럼). X-PartnerKey와 Authorization을 'securityCode'및 'passkey'(내가 만든 헤더)와 같은 방식으로 설정합니다. 호스트와 사용자 에이전트는 $ .ajax 호출을 할 때 설정되어야합니다. 문제를 제대로 이해하지 못해 죄송합니다.소스 코드가 있다면 게시하여 도움을받을 수 있습니다. 감사합니다. –

    +1

    예제와 마찬가지로 요청 헤더를 설정했지만, 이것을 실행하고 피들러를 통해 보았을 때 헤더의 이름은 표시되지만 값은 표시되지 않습니다. 또한 피들러에서 나는 GET/URL로 표시 될 GET을 시도하지만 GET으로 유형을 설정하면 OPTIONS/URL로 표시됩니다. 희망은 더 이해가됩니다. 나는 소스 코드를 게시 할 것이지만 실제로는 당신과 동일하다. Thanks Again – Berty

    12

    입니다 우 그런 고급 옵션을 지정할 수는 없습니다. 이렇게하려면 전체 $ .ajax() 메서드를 사용해야합니다. http://api.jquery.com/jQuery.getJSON/에서 문서의주의 사항은, "이것은에 해당하는 속기 아약스 기능입니다 :"

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

    그래서 단지 $ 아약스()를 사용하고 당신이 필요로하는 모든 추가 매개 변수를 제공합니다.

    24

    나는 이런 식으로()는해서 getJSON을 헤더를 설정하고 여전히 사용할 수 있다고 생각 :

    $.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

    문서 (http://api.jquery.com/jquery.ajaxsetup/)에서 : "사용하지 않는 것이 좋습니다." –

    +3

    @ matt-burns, true. 내 솔루션은 모든 jquery 아약스 요청 헤더에 그 두 값을 가질 것입니다. 나는이 경우 무해하다고 생각한다. ajaxSetup()을 사용하여 url이나 요청 유형을 설정했다면 잠재적으로 문제가 발생할 수 있습니다. 나는 그것이 낙담 할 것입니다. 알고 있어야 할 것. –

    +1

    제 경우에는 실제로 모든 getJSON 호출에 동일한 헤더를 사용해야합니다. 그래서 이것은 저를위한 훌륭한 해결책입니다 :) – marlar

    관련 문제