如何转换卷曲请求,Ajax和卷曲-d体

问题描述:

我试图让卷曲请求(通过终端我的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等是这些代码之外定义有效变量。

的内容类型的要求是application/json,你应该把它添加到请求,并确保内容本身作为字符串发送(使用JSON.stringify):

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

噢,那也是。 – SeanKendle

+1

@SeanKendle检查答案更新 – Dekel

+0

是的,我只是假设很快被封在试图发送一个AJAX请求跨域。 – SeanKendle

由于同源策略,可能会被阻止。

你用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中的应用程序。 –