[英]Network Error in Amazon DynamoDB using in browser JavaScript
[英]Consume Amazon dynamoDB with JavaScript
我一直在尝试使用jQuery和Ajax调用通过JavaScript与Amazon DynamoDB进行交互,但一直没有成功。 经过两天的研究,我开始认为这可能是不可能的。 我看到他们有适用于Java,PHP和.Net的SDK,但还没有JavaScript。
亚马逊解释了如何在此链接中向发电机发送命令:
我已经能够使用PHP sdk和node.js(https://github.com/xiepeng/dynamoDB)来完成它,但是通常的javascript ajax调用或xmlHttpRequest调用没有运气。
我已经能够获得有效的aws签名,秘密ID和会话令牌,因此我将其硬编码到头中。
这是我的代码:
$.ajax({
beforeSend: function(xhr) {
console.log("getting built");
xhr.setRequestHeader('host', 'dynamodb.us-east-1.amazonaws.com');
xhr.setRequestHeader('x-amz-date', 'Fri, 10 Feb 2012 20:44:00 GMT');
xhr.setRequestHeader('date', 'Fri, 10 Feb 2012 20:44:00 GMT');
xhr.setRequestHeader('x-amz-security-token', '**MYSECURITY TOKEN**');
xhr.setRequestHeader('x-amz-target', 'DynamoDB_20111205.PutItem');
xhr.setRequestHeader('content-type', 'application/x-amz-json-1.0');
xhr.setRequestHeader('content-length', 103);
xhr.setRequestHeader('x-amzn-authorization', 'AWS3 AWSAccessKeyId=**MY ACCESS KEY**,Algorithm=HmacSHA256,SignedHeaders=host;x-amz-date;x-amz-security-token;x-amz-target,Signature=**MY SIGNATIURE**=');
},
type: "POST",
url: "http://dynamodb.us-east-1.amazonaws.com",
dataType: "json",
data: '{"TableName":"Sample","Item":{"RecordId":{"S":"white"},"Square":{"S":"teess"},"circle":{"S":"eeerer"}}}',
error: function(XHR,textStatus,errorThrown) {
// alert ("XHR="+XHR+"\ntextStatus="+textStatus+"\nerrorThrown=" + errorThrown);
console.log(XHR);
console.log(textStatus);
console.log(errorThrown);
},
success: function(data) {
console.log("success");
}
});
当我运行这个时,我得到404 Not found错误,方法显示为“OPTIONS”(而不是POST或GET)
不熟悉AWS Dynamo,但我非常熟悉HTTP和XMLHttpRequest,而Host
不是可以通过xhr设置的标头。 XHR从正在请求的URL中提取主机信息。 不确定$.ajax
是否会忽略您尝试设置该标头,但我会在没有它的情况下尝试它。
另外,你如何计算你的内容长度? 您的字符串有 103 个字符 ,但它不一定是103字节(这取决于编码,字符集,等),这是怎么Content-Length
被计算。 我会尝试没有那个标题。
让我们知道怎么回事!
更新:
我认为自从微软为每个人做出决定以来,它已成为Ajax的一部分“同源政策”的受害者。 :-)您将需要编写驻留在您的域上的某种服务器端代理,并向其发出Ajax请求。
你熟悉PHP吗? 看起来AWS在PHP中有一个用于DynamoDB的库。
您正在尝试使用AJAX进行跨域请求。 除非您的应用程序和服务都已设置,否则这不一定有效。 AWS目前不允许通过CORS协议发出请求。 您看到的OPTIONS标头是您的JavaScript向AWS发出飞行前CORS请求,该请求被拒绝。 您需要使用服务器端代理(使用AWS提供的SDK之一)来进行实际的服务调用。 您的JavaScript可以通过AJAX与您的代理进行通信,因为它将托管在同一个域中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.