2

中央データベースとしてgoolesフュージョンテーブルを使用する小さなGoogleChrome拡張機能を作成したいと思います。

既存のテーブルとデータ(GooleDoc-Websideを介して追加)の使用は非常にうまく機能します(SELECT、SHOW TABLES、DESCRIBE)が、変更を行おうとすると(このためには、「POST」リクエストが必要です)。「SQLパラメータがありません」というエラーが常に発生します。なぜこれが起こるのか私にはわかりません。私はすでにたくさん試しました(例えば、「テーブルtest3(A:number、B:number)を作成する」、挿入します。)

私が書いたコードは次のとおりです。

function Fusion(readyCallback) {
    var myObject = {
        URL : "https://www.google.com/fusiontables/api/query",
        authToken : null,
        doGET : function(command,callback) {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("get"
                        ,this.URL+"?sql="+encodeURI(command)
                        ,true);
            xmlhttp.setRequestHeader("Authorization"
                                    ,"GoogleLogin auth=" + this.authToken);
            xmlhttp.onreadystatechange = function() { callback(xmlhttp.responseText); }
            xmlhttp.send();
        },
        doPOST : function(command,callback) {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("post"
                        ,this.URL
                        ,true);
            xmlhttp.setRequestHeader("Authorization"
                                    ,"GoogleLogin auth=" + this.authToken);
            xmlhttp.onreadystatechange = function() { callback(xmlhttp.responseText); }
            xmlhttp.send("sql="+encodeURI(command));
        }
    }
    // client login authentification
    var email    = "XXX@gmail.com";
    var password = "XXX";
    var loginURL = "https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email="
              + encodeURI(email) + "&Passwd=" + encodeURIComponent(password) 
              + "&service=fusiontables&Source=testing";
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("get",loginURL,true);
    xmlhttp.onreadystatechange = function() {
        var tmp = xmlhttp.responseText;
        tmp = tmp.slice(tmp.search("Auth=") + 5, tmp.length);
        tmp = tmp.replace(/\n/g, "");
        tmp = tmp.replace(/\r/g, "");
        myObject.authToken = tmp;
        console.log("authentifiaction token status: "+xmlhttp.statusText);
        if (readyCallback) {
            readyCallback();
        }                                  
    };
    xmlhttp.send();

    return myObject;
}

たとえば私がこのようなことをしようとすると

mf.doPOST("INSERT INTO 2664928(ID,Text,Number) VALUES (2,'Hallo',3)",mc)

またはこれ

mf.doPOST("INSERT INTO 2664928(col4,col0,col1) VALUES (2,'Hallo',3)",mc)

これによって記述されるテーブルで

column id,name,type
col4,ID,number
col0,Text,string
col1,Number,number

このエラーが発生し続けます(テーブルを作成しようとした場合も同じです)

助言がありますか?私は本当に混乱しています!

4

2 に答える 2

2

「Missing sql parameter」に関するメッセージ。本当のエラーではないようです。

問題を正しく理解したところ、現在 JavaScript を使用してデータを Fusion Tables に POST することはできません。GFT が POST 要求の適切な CORS ヘッダーに送信する場合、実際に機能する可能性があります。しかし、現時点ではそうではありません。

問題 554 ( http://code.google.com/p/fusion-tables/issues/detail?id=554 ) を参照してください。

于 2012-03-27T16:43:41.100 に答える
0

content-length ヘッダーをリクエストに追加してみてください。

var query = "sql="+encodeURI(command);
xmlhttp.setRequestHeader("Content-length", query.length);

また、ClientLogin リクエストを GET リクエストではなく POST リクエストとして送信して、ユーザー名とパスワードが URL の一部として送信されないようにすることをお勧めします。

于 2012-01-24T00:31:47.020 に答える