2012-09-27 2 views
0

단일 페이지 js 앱이 있고 로그가 포함 된 서버에 사용자 정의 헤더를 전송하고 있습니다. 그러나 서버가 8k보다 큰 요청을 허용하지 않기 때문에이 헤더의 크기를 제어해야합니다. .보내기 전에 jQuery 요청 헤더를 수정하십시오.

내 솔루션은 지금까지 내 응용 프로그램에서 나가는 모든 아약스 요청을 가로 채기위한 것이 었습니다.

나는 모든 요청을 가로 채기 위해 jQuery Global Ajax Events, 특히 ajaxSend을 사용하고 있습니다. 로컬 이벤트이기 때문에 beforeSend을 사용할 수 없습니다.

콜백의 요청 헤더에 액세스 할 수 없습니다. 모든 요청의 헤더를 읽고 너무 큰 경우 로그 헤더를 줄여야합니다.

+0

검사 : http://stackoverflow.com/questions/7686827/how-can-i-add-a-custom-http-header-to-ajax-request-with-js-or -jquery –

답변

3

메시지를 보내기 전에 beforeSend을 사용하여 요청을 수정하려고합니다. 이 모든 것은 링크 된 문서에서 다룹니다.

세계 ajaxSend 이벤트는 요청을 무단으로 변경하는 데 도움이되지 않습니다. 당신이 얻을 수있는 가장 가까운 것은 beforeSend 옵션을 모든 후속 ajax 호출에 대해 기본값으로 지정하여 ajaxSetup으로 호출하는 것입니다.


XMLHttpRequest 개체에서 요청 헤더를 가져 오는 간단한 방법이없는 것처럼 보입니다. 난 당신이 로깅 헤더를 직접 설정하는 가정 때문에, 그러나 당신이이 헤더의 설정에 걸고 접근 그들에게 참조 저장할 수 있습니다 이러한 방식으로

XMLHttpRequest.prototype.readableHeaders = {}; 
XMLHttpRequest.prototype.proxiedSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader; 
XMLHttpRequest.prototype.setRequestHeader = function(header, value) { 
    this.proxiedSetRequestHeader(header, value); 
    this.readableHeaders[header] = value; 
}; 

을, 당신은 할 수 있어야한다 beforeSend에 특정 로깅 헤더에 대한 jqXHR.readableHeaders 개체를 직접 검사하고 필요한 경우 문자열을 자르려면 setRequestHeader을 다시 호출하십시오.

헤더를 검색하려면 jqXHR 객체에서 XMLHttpRequest의 기본 인스턴스에 액세스해야합니다. xhr() 함수를 사용하여 인스턴스를 검색하십시오. 이 답변 밖으로

$.ajaxSetup({ 
    beforeSend: function (jqXHR, settings) { 
    console.log(settings.xhr().readableHeaders); 
    } 
}); 
+0

David 님, 그러나 ** 모든 요청을 가로 채고 싶습니다. ** beforeSend는 로컬 아약스 이벤트입니다. 그래서'ajaxSend'를 사용하고 있습니다. –

+0

@ alexandru.topliceanu : 아, 미안. 'ajaxSetup'을 사용하여 모든 요청에 ​​대한 특정 'beforeSend' 리스너 기본값을 만들 수 있습니다. 내 업데이트 된 답변을 참조하십시오. –

+0

위대한,하지만 난 여전히 그들을 수정하는 헤더에 액세스 할 수 있습니다. 'beforeSend'는'jqXHR'과'settings'를 매개 변수로 사용하여 호출됩니다. 그 중 아무 것도 요청 헤더를 다시 찾을 수없는 것 같습니다. 즉, 헤더를 설정하기 위해'jqXHR.setRequestHeader()'를 사용할 수 있지만 모든 헤더를 읽는 방법은 무엇입니까? –

관련 문제