요청 본문에 유효한 json을 게시하는 jQuery


180

따라서 jQuery Ajax docs 에 따르면 요청을 보낼 때 쿼리 문자열 형식으로 데이터를 직렬화하지만 설정 processData:false하면 본문에서 실제 JSON을 보낼 수 있습니다. 불행히도 나는 이것이 일어나는지 먼저 결정하는 데 어려움을 겪고 있습니다. 내가 아는 것은 서버가 내가 보내는 것을 파싱하지 않는다는 것입니다.

http 클라이언트 를 사용하여 객체 literal을 게시하면 {someKey:'someData'}작동합니다. 그러나와 함께 jQuery를 사용 data: {someKey:'someData'}하면 실패합니다. 불행히도 Safari에서 요청을 분석하면 메시지 페이로드가 [object Object]훌륭합니다 ... 파이어 폭스에서는 게시물이 비어 있습니다 ...

자바 측에서 본문 내용을 로깅 할 때 문자 그대로 [object Object]어떻게 REAL JSON 데이터를 전송합니까?

jQuery에서 보낸 요청과 함께 요청 본문에서 JSON 데이터를 직렬화하는 Java 서비스에 경험이 있습니까?

BTW는 전체 $ .ajax 요청입니다.

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

답변:


293

실제 JSON 요청은 다음과 같습니다.

data: '{"command":"on"}',

실제 JSON 문자열을 보내는 곳. 보다 일반적인 솔루션을 사용 JSON.stringify()하려면 다음과 같이 객체를 JSON으로 직렬화하는 데 사용 하십시오.

data: JSON.stringify({ "command": "on" }),

JSON객체 가없는 구형 브라우저를 지원하려면 json2.js 를 사용하여 추가하십시오.


현재 일어나고있는 것은 당신이 가지고 있기 때문에 processData: false, 기본적으로 이것을 보내고 있습니다 : ({"command":"on"}).toString()이것은 [object Object]... 당신의 요청에서 보는 것입니다.


더 이상 processData가 필요하지 않습니다. false using JSON.stringify()?
brad

6
@ brad-맞습니다. 이미 문자열 이기 때문에이 작업을 수행 한 후에는 문제가되지 않습니다.이 경우 jQuery는 더 이상 처리하지 않습니다 .
Nick Craver

2
매력처럼 일했습니다, 많은 감사합니다! 그렇다면 모든 요청 본문이 다른 쪽 끝에서 구문 분석되는 문자열이어야한다는 것이 사실입니까?
brad

jQuery data를 JSON으로 보내는 대신 문자열로 구문 분석하는 이유는 무엇 입니까?
Adam Zerner

참고 사항 : 양식 데이터 대신 "본문 요청 페이로드"로 필요한 사람이 있으면 contentType: "application/json; charset=utf-8",이 스레드에 언급 된대로 포함하는 것을 잊지 마십시오 . stackoverflow.com/questions/21201270/…
raydlevel5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.