2011-10-21 1 views
1

AJAX를 사용하여 SOAP 호출 (크로스 사이트가 아니므로 프록시와 관련된 문제가 발생하지 않아야 함)을 호출하려고합니다.
그러나 , XHR, SOAPTarget 및 SOAPAction에 두 개의 사용자 정의 헤더가 필요합니다. 현재, 나는 아약스 호출과 같이 할 jQuery를 사용하고 있습니다 :XMLHTTPResquest.setRequestHeader()가 사용자 정의 페이지 헤더를 추가하지 않습니다.

jQuery.ajax({ 
     url: this.location, 
     type: 'POST', 
     data: sm, 
     dataType: "xml",    
     contentType: "text/xml", 
     processData: false, 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader(
       "SOAPTarget", 
       this.location 
      ); 
      xhr.setRequestHeader(
       "SOAPAction", 
       this.urn 
      ); 
     },  
     success: jQuery.jSOAPClient.success, 
     error: jQuery.jSOAPClient.error 
    }); 

코드를 예상대로 모두 실행하는, 나는 방화범 헤더를 볼 때 그러나, 그들에게 변화가 없습니다.

+0

테스트를 실행하면 Safari와 FF에서 저에게 효과적입니다. "요청 헤더"를 확인하십시오. 그 후에 서버 측에서 확인하십시오. – airportyh

+0

조사해 주셔서 감사합니다! 그것은 당신을 위해 일한 것이 흥미 롭습니다. 결국 대답은 범위 지정 문제로 밝혀졌습니다. 네가 도망친 검사 사본을 가지고 있다고 생각하지 않니? –

+0

부수적으로, "beforeSend"대신 "header :"태그를 사용했습니다. 'headers : {SOAPAction : requestList [reqItem] .SOAPAction, SOAPTarget : requestList [reqItem] .SOAPTarget}'그것은 함수 호출의 오버 헤드를 피합니다. – Richard

답변

2

XHR은 null 값을 가진 요청 헤더를 허용하지 않으며,이 블록의 this은 ajax 호출이 포함 된 객체가 아니라 Ajax 호출을 참조합니다.

이 질문은 "noob mistakes happen"로 바꿔야합니다.

1

나는 최근에 비슷한 문제가있었습니다. 'beforeSend'를 사용하는 대신 ajaxSend을 사용해보십시오.

+0

이것이 작동하지 않았지만 코드를 통해 올바른 장소로 이동하는 데 도움이되었습니다. XHR이 빈 값으로 새로운 헤더를 설정하지 않을 것이라는 것을 알았고, 내가 부른 변수는 잘못된 범위에있었습니다. 감사! –

관련 문제