2012-11-19 4 views
0

XMLHttpRequest를 사용하여 PUT 요청을 보내려고하지만 인수를 전달하는 방법을 모르겠습니다.curl -X PUT -d 'data = { "keyname": "keyvalue"}'

내가 보낼 것을의 컬 버전은 다음과 같습니다

var xhr = new XMLHttpRequest(); 
xhr.open("PUT", ROOT_URL + link + "?auth_token=" + token, true); 
xhr.setRequestHeader("Cache-Control", "no-cache"); 
var data = 'data={"keyname":"' + keyvalue + '"}'; 
xhr.send(data); 

그러나 : 나는 전화를 걸 수있는 인증 토큰을 가지고

$ curl -u [email protected] -X PUT -d 'data={"keyname":"keyvalue"}' https://api.myurl.com/v1/action 

그래서 내가 노력하고있어 이것이다 내가 잘못하고있는 무슨에

"data={\"keyname\":\"keyvalue\"}" does not have a valid root. 

어떤 아이디어를 말한다 500 서버 오류 등을 얻을 수 있기 때문에 정확하지 않는 것?

+0

사용해보십시오 (그래서 서버 데이터 해석 방법을 알고 있음). –

+0

CURL'man' 페이지를 읽으면'-d'를 사용할 때 컨텐트 타입 헤더가 자동으로 그 값으로 설정됩니다. 그래서 그것은 실제로 문제가 될 수 있습니다. 그러나 서버가 JSON을 직접 받아 들일 수도 있습니다.이 경우 JSON.stringify (some_object)를 보내고 내용 유형 헤더를 application/json으로 설정하기 만하면됩니다. –

답변

1

"data={\"keyname\":\"keyvalue\"}"이 유효한 json 개체를 나타내지 않기 때문입니다.

당신을 application/x-www-form-urlencoded``에`내용-Type` 요청 헤더를 설정해야 할 수도 있습니다

xhr.send({keyname:keyvalue});, passing a valid json object 

또는

var data = {keyname:keyvalue}; 
    xhr.send(JSON.stringify(data));, passing a json object string representation 
+0

[ "JSON 개체 같은 것이 없습니다"] (http://benalman.com/news/2010/03/theres-no-suchthing-as-a-json/). 당신이 지나가는 것은 자바 스크립트 객체이며'[object Object]'문자열로 변환 될 가능성이 큽니다. JSON을 보내려면 객체를 JSON으로 변환해야하며, 두 번째 예제에서 표시해야합니다. 자바 스크립트에서'{keyname : keyvalue}'는 JSON가 아닌 객체입니다. 게다가 OP는 CURL을 사용하여'data = { "keyname": "keyvalue"}'를 성공적으로 보냈습니다. –

+0

신난다, 당신에게 감사합니다! – ryanstewart