如何转换卷曲请求,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);
}
});
显然,auth
,accountNumber
等是这些代码之外定义有效变量。
答
的内容类型的要求是application/json
,你应该把它添加到请求,并确保内容本身作为字符串发送(使用JSON.stringify
):
$.ajax({
...
contentType: 'application/json',
data: JSON.stringify({'order': { ... }}),
...
});
答
由于同源策略,可能会被阻止。
你用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中的应用程序。 –
噢,那也是。 – SeanKendle
@SeanKendle检查答案更新 – Dekel
是的,我只是假设很快被封在试图发送一个AJAX请求跨域。 – SeanKendle