2017-08-09 184 views
1

我試圖讓捲曲請求(通過終端我的Mac上工作)到jQuery的Ajax和我得到一個400錯誤的請求。如果您發現我的代碼存在任何問題,請告訴我。這有助於使用Oanda v20 API。經由終端如何轉換捲曲請求,Ajax和捲曲-d體

捲曲(工作):

body=$(cat << EOF 
{ 
    "order": { 
    "units": "100", 
    "instrument": "EUR_USD", 
    "timeInForce": "FOK", 
    "type": "MARKET", 
    "positionFill": "DEFAULT" 
    } 
} 
EOF 
) 

curl \ 
    -X POST \ 
    -H "Content-Type: application/json" \ 
    -H "Authorization: Bearer <AUTHENTICATION TOKEN>" \ 
    -d "$body" \ 
    "https://api-fxpractice.oanda.com/v3/accounts/<ACCOUNT>/orders" 

jQuery的AJAX(不工作):

$.ajax({ 
    type: "POST", 
    url: 'https://api-fxpractice.oanda.com/v3/accounts/' + accountNumber + '/orders', 
    data: { 
     "order": { 
      "units": "10000", 
      "instrument": "EUR_USD", 
      "timeInForce": "FOK", 
      "type": "MARKET", 
      "positionFill": "DEFAULT" 
     } 
    }, 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "Bearer " + auth) 
    }, success: function(data){ 

     console.log(data); 

     } 
}); 

顯然,authaccountNumber等是這些代碼之外定義有效變量。

回答

2

的內容類型的要求是application/json,你應該把它添加到請求,並確保內容本身作爲字符串發送(使用JSON.stringify):

$.ajax({ 
    ... 
    contentType: 'application/json', 
    data: JSON.stringify({'order': { ... }}), 
    ... 
}); 
+0

噢,那也是。 – SeanKendle

+1

@SeanKendle檢查答案更新 – Dekel

+0

是的,我只是假設很快被封在試圖發送一個AJAX請求跨域。 – SeanKendle

1

由於同源策略,可能會被阻止。

你用JSONP試過了嗎? (添加dataType: "jsonp"到你的Ajax調用)

$.ajax({ 
    type: "POST", 
    dataType: "jsonp", 
    url: 'https://api-fxpractice.oanda.com/v3/accounts/' + accountNumber + '/orders', 
    data: { 
     "order": { 
      "units": "10000", 
      "instrument": "EUR_USD", 
      "timeInForce": "FOK", 
      "type": "MARKET", 
      "positionFill": "DEFAULT" 
     } 
    }, 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "Bearer " + auth) 
    }, success: function(data){ 

     console.log(data); 

     } 
}); 

然而,鑑於你看似打印頁面上某人的帳號成純文本的JavaScript,那豈不是更安全的,從自己發送捲曲請求PHP文件?使用Ajax調用你的本地文件,然後從那裏發送CURL請求,並使用API​​的響應來制定你自己的JSON響應,以發送回你的客戶端。

+0

你是對的,但這是我試圖建立在客戶端語言上的應用程序。這僅供我使用。基本上,我只是試圖構建一個運行在Chrome中的應用程序。 –