Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript使用Amazon dynamoDB_Javascript_Jquery_Amazon Dynamodb - Fatal编程技术网

使用JavaScript使用Amazon dynamoDB

使用JavaScript使用Amazon dynamoDB,javascript,jquery,amazon-dynamodb,Javascript,Jquery,Amazon Dynamodb,我一直试图使用jQuery和Ajax调用通过JavaScript与AmazonDynamodb交互,但都失败了。经过两天的研究,我开始意识到这可能是不可能的。我看到他们有可用于Java、PHP和.Net的SDK,但还没有用于JavaScript的SDK Amazon在此链接中解释了如何向dynamo发送命令: 我已经能够通过PHPSDK和node.js实现这一点(https://github.com/xiepeng/dynamoDB),但常规的javascript ajax调用或xmlHttp

我一直试图使用jQuery和Ajax调用通过JavaScript与AmazonDynamodb交互,但都失败了。经过两天的研究,我开始意识到这可能是不可能的。我看到他们有可用于Java、PHP和.Net的SDK,但还没有用于JavaScript的SDK

Amazon在此链接中解释了如何向dynamo发送命令:

我已经能够通过PHPSDK和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错误,方法显示为“选项”(与POST或get相反)

不太熟悉AWS Dynamo,但非常熟悉HTTP和XMLHttpRequest,并且
主机
不是可以通过xhr设置的头。XHR从被请求的url中提取主机信息。不确定
$.ajax
是否会忽略您是否尝试设置该标题,但我会尝试不设置该标题

另外,您如何计算内容长度?那里的字符串103个字符,但不一定是103个字节(取决于编码、字符集等),这就是计算
内容长度的方式。我也会在没有头球的情况下尝试

让我们知道进展如何

更新:

我认为是“同源策略”的受害者,自微软为所有人做出这一决定以来,该策略一直是Ajax的一部分。:-)您必须编写某种驻留在您的域上的服务器端代理,并向/从该代理发出Ajax请求


你熟悉PHP吗?看起来AWS在PHP中有一个DynamoDB库。

您正在尝试使用AJAX进行跨域请求。除非您的应用程序和服务都为此进行了设置,否则这并不一定有效。AWS目前不允许通过CORS协议进行请求。您看到的选项标题是JavaScript向AWS发出飞行前CORS请求,该请求被拒绝。您需要使用服务器端代理(使用AWS提供的SDK之一)来进行实际的服务调用。您的JavaScript可以通过AJAX与您的代理对话,因为它将托管在同一个域上。

让我来搞定。。。您想直接从UI调用DB而不进行任何服务器端验证吗?嗨,Benqus,谢谢您的回答。是的,我尝试在没有任何服务器端验证或服务器脚本(php、.net、ruby等)的情况下访问dynamodb。我想用javascript做任何事情。我真的不想让你失去动力,但这对我来说似乎很不安全。。。我不知道,也许我太谨慎了,但你不应该这么做……谢谢daniel0mullins,你是对的,“主机”可能不是我可以设置的属性,103是一个硬编码值。基本上,我所做的就是通过他们的PHPSDK调用amazon的api并查看标题。我在javascript调用中复制并粘贴(试图模拟)标题内容,但显然失败得很惨。这就是103的来源。我正试图直接从javascript生成一个httpRequest,用正确的头正确地点击dynamoDB api。再次感谢daniel。是的……我想我要求助于服务器端逻辑,我认为这是唯一的方法。我可能会用PHPSDK来做这件事,因为我在测试javascript的时候让它工作了,PHP会工作得很好,sdk很好,因为它可以为您处理请求签名。