source

jquery getResponseHeader는 항상 '정의되지 않음'을 반환합니까?

manycodes 2023. 10. 18. 22:53
반응형

jquery getResponseHeader는 항상 '정의되지 않음'을 반환합니까?

저는 ajax를 통해 제출하는 양식이 있습니다.저는 jquery form plugin을 사용하고 있습니다.제가 하려는 것은 서버에서 반환되는 '위치' 헤더를 가져오는 것입니다.불벌레에서 볼 수 있습니다.하지만 성공 콜백에서 getResponseHeader() 함수를 호출할 때마다 항상 '정의되지 않음'이 반환됩니다.

코드:

form.ajaxForm({
  dataType: 'xml',
  data: {format: 'xml'},
  resetForm: true,
  success: function(xml,status,xhr){
    var location = xhr.getResponseHeader('Location');
    alert(location);
  });

위치가 정의되지 않았습니다.하지만 파이어버그에서 '위치' 헤더가 보입니다.제가 무엇을 빠뜨리고 있나요?xhr 개체에서 getAllResponseHeaders()를 호출해도 '정의되지 않음'을 반환합니다.

CORS 요청인 경우 디버그 도구(예: Chrome->Inspect Element->Network)에서 모든 헤더를 볼 수 있지만 xHR 개체는 다음을 통해서만 헤더를 검색합니다.xhr.getResponseHeader('Header')) 이러한 헤더가 단순 응답 헤더일 경우:

  • Content-Type
  • Last-modified
  • Content-Language
  • Cache-Control
  • Expires
  • Pragma

이 집합이 아닌 경우, 서버가 반환하는 Access-Control-Exposure-Headers 헤더에 존재해야 합니다.

문제가 된 케이스와 관련하여, CORS 요청일 경우, 해당 케이스를 회수할 수 있을 뿐입니다.Location머리끝으로 보다.XMLHttpRequestobject(객체)는 아래 헤더가 존재하는 경우에만 해당합니다.

Access-Control-Expose-Headers: Location

CORS 요청이 아니라면,XMLHttpRequest검색하는 데 문제가 없을 겁니다

XMLHttpRequest가 투명하게 리디렉션 뒤에 따르므로 최종 요청에는 헤더가 없습니다. 이미 해당 리디렉션이 뒤따르고 해당 요청의 응답 헤더가 표시됩니다(초기 요청에는 해당됨).Location머리글).

Location 헤더가 있는 201개의 "created"를 새 객체와 빈 본체로 되돌리는 레일/휴식 방법을 사용하여 비슷한 작업을 수행하고 있습니다.jQuery의 아약스 메소드는 json을 기대했지만 아무것도 돌려받지 못했기 때문에 이 문제가 발생했을 때 "parse error"를 던집니다.오류 콜백에서 201 방향 전환을 포착하면 다음과 같습니다.

function request_error(req, textStatus, errorThrown) 
{
    if (req.status == 201 ) {
        var created_loc = req.getResponseHeader('Location');
        console.log('(201) created: ' + created_loc);

        // ... manual redirect here i.e. issue another ajax request to created_loc
        return;
    }

    // ... handle an actual error here
}

이것이 도움이 되기를 바랍니다!

언급URL : https://stackoverflow.com/questions/4369987/jquery-getresponseheader-always-returns-undefined

반응형