3

jQuery と Ajax 呼び出しを使用して JavaScript 経由で Amazon DynamoDB と対話しようとしましたが、失敗しました。2日間の調査の後、私はそれが不可能かもしれないと考え始めています. Java、PHP、および .Net で利用できる SDK があるようですが、JavaScript はまだありません。

Amazon は、このリンクで dynamo にコマンドを送信する方法を説明しています。

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/UsingJSON.html#JSONMajorExample

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 ではなく)。

4

2 に答える 2

3

AJAX を使用してクロスドメイン リクエストを作成しようとしています。これは、アプリケーションとサービスの両方がセットアップされていない限り、必ずしも機能するものではありません。AWS は現在、CORS プロトコル経由のリクエストを許可していません。表示された OPTIONS ヘッダーは、拒否されている AWS へのプリフライト CORS リクエストを作成する JavaScript です。実際のサービス呼び出しを行うには、サーバー側のプロキシ (AWS が提供する SDK の 1 つを使用) を使用する必要があります。同じドメインでホストされるため、JavaScript は AJAX を介してプロキシと通信できます。

于 2012-03-15T17:12:13.120 に答える
3

AWS Dynamo にはあまり詳しくありませんが、HTTP と XMLHttpRequest には非常に精通しており、Hostxhr で設定できるヘッダーではありません。XHR は、要求されている URL からホスト情報を取得します。そのヘッダーを設定しようとしているのを無視するかどうかはわかりませ$.ajaxんが、それなしで試してみます。

また、コンテンツの長さをどのように計算していますか? あなたの文字列に103文字ありますが、必ずしも 103 バイトであるとは限りません (エンコーディング、文字セットなどによって異なります)。これは のContent-Length計算方法です。そのヘッダーなしでも試してみます。

それがどうなるか教えてください!

アップデート:

Microsoft がすべての人のために決定を下して以来、Ajax の一部となっている「Same-Origin Policy」の犠牲になっていると思います。:-) ドメインに存在するある種のサーバー側プロキシをコーディングし、それとの間で Ajax リクエストを行う必要があります。

PHPに精通していますか?AWS には PHP の DynamoDB 用のライブラリがあるようです。

于 2012-02-11T06:32:56.887 に答える