2012-11-19 51 views
0

我想使用XMLHttpRequest來發送PUT請求,但我不知道如何傳遞參數。JS的等價curl -X PUT -d'data = {「keyname」:「keyvalue」}'

什麼,我想送的捲曲的版本是:

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

我有一個身份驗證令牌撥打電話等什麼我想是這樣的:

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); 

但是,似乎不正確,因爲我得到一個500服務器錯誤回說

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

任何想法我做錯了什麼?

+0

您可能必須在'內容Type'請求頭設置爲'應用程序/ x-WWW的形式urlencoded'(這樣服務器知道如何解釋數據)。 –

+0

只需閱讀CURL'man'頁面,它表示在使用'-d'時內容類型標題會自動設置爲該值。所以這可能確實是問題所在。但請注意,服務器也可能直接接受JSON,在這種情況下,您只需發送'JSON.stringify(some_object)'並將內容類型頭設置爲'application/json'。 –

回答

1

這是因爲"data={\"keyname\":\"keyvalue\"}"不代表有效的json對象。

嘗試使用

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-such-thing-as-a-json/)。你傳遞的是一個JavaScript對象,它很可能被轉換爲字符串'[object Object]'。如果您想發送JSON,則必須將該對象轉換爲JSON,並在第二個示例中顯示。在JavaScript中,「{keyname:keyvalue}」是一個對象,而不是JSON。此外,OP似乎成功地發送了'data = {「keyname」:「keyvalue」}'CURL。 –

+0

太棒了,謝謝你們倆! – ryanstewart