2008-11-14 3 views
0

jQuery를 사용하여 원격 엔드 포인트에 AJAX 요청을하고 있습니다. 해당 엔드 포인트는 실패가 있고 그 오브젝트가 실패를 설명 할 경우 JSON 오브젝트를 리턴합니다. 요청이 성공하면 HTML 또는 XML을 반환합니다.

$.ajax() 호출의 일부로 jQuery에서 예상되는 요청 유형을 정의하는 방법을 참조하십시오. success 처리기에서 요청 유형을 감지하는 방법이 있습니까?

$.ajax(
    { 
     type: "DELETE", 
     url: "/SomeEndpoint", 
     //dataType: "html", 
     data: 
      { 
       "Param2": param0val, 
       "Param1": param1val 
      }, 
     success: function(data) { 
       //data could be JSON or XML/HTML 
      }, 
     error: function(res, textStatus, errorThrown) { 
       alert('failed... :('); 
      } 
    } 
); 

답변

4

응용 프로그램에서 올바른 Content-Type 헤더 (application/json, text/xml 등)를 생성하고 성공 콜백에서 처리합니다. 이런 식으로 뭔가를 할 수 있을까요?

xhr = $.ajax(
    { 
     //SNIP 
     success: function(data) { 
       var ct = xhr.getResponseHeader('Content-Type'); 
       if (ct == 'application/json') { 
        //deserialize as JSON and continue 
       } else if (ct == 'text/xml') { 
        //deserialize as XML and continue 
       } 
      }, 
     //SNIP 
); 

테스트되지 않았지만 촬영 가치가 있습니다.

+0

Owen의 응답은 적절하지만 완전한 콜백은 데이터를 얻지 못하기 때문에 비슷한 범위의 데이터 (메서드 범위 외의 데이터를 저장 ... 완료)를 사용해야합니다. 나는 그것이 더 깨끗하다고 ​​생각했기 때문에이 방법을 사용했다. –

0

성공 처리기를 호출 할 때까지 데이터는 이미 사용자를 위해 deserialize되었습니다. 성공적인 결과를 위해 항상 동일한 데이터 유형을 리턴해야합니다. 진실로 오류가 발생하면 예외를 던져서 대신 오류 콜백에 의해 처리되도록해야합니다. 이렇게하면 결과 오류를 구문 분석하고 콜백에 패키지화 할 수 있습니다. 즉, 응답에 200 OK 상태가 없음을 감지하고 결과를 구문 분석하여 오류 정보를 가져올 수 있습니다.

+0

어떤 경우에는 JSON을, 다른 경우에는 HTML을 반환하는 메서드가 있습니다. 오류의 JSON 설명을 리턴하는 이유는 그것이 모든 서버 측 데이터 유효성 검증 오류를 설명하는 오브젝트이기 때문입니다. 사용하기에 적합한 패턴 인 것 같습니다. 동의하지 않는다? –

3

complete 옵션을 사용하는 방법에 대해 알려주세요.

$.ajax({ 
    ... 

    complete : function(xhr, status) { 
    // status is either "success" or "error" 
    // complete is fired after success or error functions 
    // xhr is the xhr object itself 

     var header = xhr.getResponseHeader('Content-Type'); 
    }, 

    ... 
}); 
+0

그래, 내가 제안한 것보다 훨씬 좋다. – dowski

관련 문제