2013-04-15 4 views
34

Jquery를 사용하여 Ajax POST 요청을 보내려고하지만 400 개의 잘못된 요청 오류가 발생했습니다.Jquery Ajax POST에서 400 잘못된 요청 오류 받기

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: { 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }, 
    error: function(e) { 
    console.log(e); 
    } 
}); 

그것은 말한다 :

여기 내 코드입니다 요청에서 자원을 구축 할 수 없습니다. 내가 무엇이 누락 되었습니까?

+0

예비 검사 : 브라우저에서 http 지적한다 : // localhost를 : 8080/맞지? –

+1

어쩌면 문제의 원인이 아니지만 [ "facebook : work, facebook : likes"] [ "facebook : work", "facebook : likes"]이되어야합니다. – smerny

+0

Java와 Jersey를 사용하고 있습니까? –

답변

75

계속 다음과 같은 기능을 사용하여 "데이터"개체에서 쿼리를 작성해야하는, 내가 실수를했고, 그 이유는 내가 캐릭터 라인 화 할 필요가 있었다 내가 보낸 JSON 데이터 XHR 개체에 콘텐츠 형식과 데이터 형식을 설정해야합니다. 그래서 올바른 버전은 여기에 있습니다 :

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: JSON.stringify({ 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }), 
    error: function(e) { 
    console.log(e); 
    }, 
    dataType: "json", 
    contentType: "application/json" 
}); 

은 다른 사람을 도움이 될 수 있음.

+4

내가 처음에 이것을 발견했다면 좌절 된 디버깅 시간을 스스로 구할 수 있었을 것입니다. 고마워;) – bugsduggan

+5

토마스 에디슨 (Thomas Edison)이 말한 것처럼, "당신은 실패하지 않았습니다. 당신은 그 시간에 작동하지 않는 N 가지 방법을 배웠습니다."그래서 당신이 그것을 일찌감치 발견하지 못해서 기뻐하고 스스로 문제를 풀려고 노력했습니다. . – sachinjain024

+1

이것은 나를 도왔습니다. 이 단계가 필요한 이유는 무엇입니까? – JasonTS

0

당신은

function buildQuery(obj) { 
     var Result= ''; 
     if(typeof(obj)== 'object') { 
      jQuery.each(obj, function(key, value) { 
       Result+= (Result) ? '&' : ''; 
       if(typeof(value)== 'object' && value.length) { 
        for(var i=0; i<value.length; i++) { 
         Result+= [key+'[]', encodeURIComponent(value[i])].join('='); 
        } 
       } else { 
        Result+= [key, encodeURIComponent(value)].join('='); 
       } 
      }); 
     } 
     return Result; 
    } 

다음 마지막으로

var data= { 
"subject:title":"Test Name", 
"subject:description":"Creating test subject to check POST method API", 
"sub:tags": ["facebook:work, facebook:likes"], 
"sampleSize" : 10, 
"values": ["science", "machine-learning"] 
} 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: buildQuery(data), 
    error: function(e) { 
    console.log(e); 
    } 
}); 
+0

당신이 "가지고 있지"않으면, jQuery가 당신을 위해 그것을 시도 할 것입니다. 비록 당신이 직접 빌드한다면, 당신이 원하는 포맷으로되어 있다는 것을 보장 할 수 있습니다. –

+0

이 방법으로 Object를 빌드 할 필요가 없다고 생각합니다. Jquery는 나를 위해 무거워. 또한 POST 메소드를 통해 데이터가 전송 될 때마다 항상 인코딩되므로 전송할 데이터에 대해 encodeURIComponent를 사용할 필요가 없습니다. – sachinjain024

2

질문이 조금 오래되었지만 누군가가 오류 400을 접하게되는 경우에 대비하여 게시 요청에 매개 변수로 csrfToken을 게시해야 할 수도 있습니다.

당신은 템플릿에 공예의 이름과 값을 얻을 수 있습니다

<script type="text/javascript"> 
    window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}"; 
    window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}"; 
</script> 

및 귀하의 요청에 전달할

data: window.csrfTokenName+"="+window.csrfTokenValue 
+0

크래프트 CMS에 관해서 아무도 언급하지 않았습니까? –