2012-11-04 5 views
1

그래서 jQuery ajax 호출이 있는데 응답이 객체인지 확인하려고합니다.Ajax 응답이 객체인지 확인하는 방법은 무엇입니까?

첫 번째 생각은 if(typeof response === "object") 이었지만 Ajax 요청이 아무 것도 반환하지 않으면 문제가 발생하지만 responsenull입니다.

여기의 문제는 typeof null === "object"입니다.

그렇다면 응답이 실제로 {} 개체라는 것을 어떻게 알 수 있습니까? "... 나는 내가 할 수있는 것 같아요"

답변

2

(아래는 편집하기 전에 말을했다 ...

은 내가 if(typeof response === "object" && response !== null)

을 할 수있는 생각하지만 이것은 정말 중복 보인다. null 체크 ISN . 't 중복,이 조건에 새로운 정보를 추가하기 때문에)

명시 적으로 null을 배제 할 수

if (response !== null && typeof response === "object") 

배열을 포함하여 모든 개체에 적용됩니다.

{}에 대한 진실과 배열 또는 다른 내장 객체,이 작업을 수행 할 수없는 무언가 원하는 경우 : Object.prototype.toString"[object Null]"으로 사양에 정의되어 있기 때문에 ...

if (Object.prototype.toString.call(response) === "[object Object]") 

null, 배열의 경우 "[object Array]", 날짜의 경우 "[object Date]" 등입니다. 사양에 의해 정의되지 않은 생성자 함수를 통해 만들어진 객체 (리바이버 함수를 사용하더라도 직렬화되지 않은 JSON을 처리 할 경우) 또한 "[object Object]"으로 나옵니다. (당신은 당신의 코드에서 function Foo을 가지고 new Foo()를 통해 개체를 만드는 경우 예는 위의 코드는 없습니다 [슬프게도, 그 객체에 대한 "[object Foo]""[object Object]"를 반환합니다.) Object.prototype.toString.call(response)response.toString() 같은 하지입니다

하는 것으로, toStringresponse 또는 프로토 타입 체인에 의해 무시 될 수 있기 때문입니다. 그래서 toStringObject.prototype에서 직접 사용합니다. (누군가 을 수행하는 것을 제외하고는을 수정하는 것처럼 바보입니다.) 사양에 따라 동작합니다.

+0

'Object.prototype = {};'을 페이지에 삽입하면 얼마나 될지 궁금한가요? – Hailwood

+0

@Hailwood : 다른 스크립트보다 먼저? 아마 모든 것. :-) –

+0

* 크롬 확장 기능 * 작성 * 확장 기능이 대중화 될 때까지 대기 * * * 확장 기능에 스크립트 삽입 * Mwhahahaha! : 어쩌면! – Hailwood

1

I have a jQuery ajax call, and I want to make sure that the response is an object

이 여전히 jQuery를 사용할 수 있음을 의미합니까? $.isPlainObject을 사용하는 것이 어떨까요?

if ($.isPlainObject(response)){ /* */ } 
+0

나는 그 함수가 존재하는지, 대답을 환호하는지, 그리고이 경우에 jquery를 사용하고 있지만 때때로 나는 그렇지 않다는 것을 알았고, 따라서 나는 이전의 대답을 받아 들였지만 이것을 염두에 둘 것이다. – Hailwood

관련 문제