Impossible de faire des modifications sur Google Fusion Tables (comme insérer, ajouter une table, etc.)

StackOverflow https://stackoverflow.com/questions/8970777

Question

Je voudrais écrire une petite extension Google Chrome dans laquelle j'utilise des tables de fusion Gooles comme base de données centrale.

L'utilisation de tables et de données existantes (ajoutées via le gooledoc-webside) fonctionne très bien (sélectionnez, affichez les tables, décrivez) mais si j'essaie de modifier (pour cela, j'ai besoin d'une demande "post"). J'obtiens toujours l'erreur suivante: "Paramètre SQL manquant." Je ne sais pas pourquoi cela se produit. J'ai déjà essayé beaucoup (par exemple "Créer Table Test3 (A: Number, B: Number)", INSERT.)

Le code que j'ai écrit est les suivants:

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;
}

Si j'essaye par exemple de faire quelque chose comme ça

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

ou ca

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

avec une table, décrite par ce

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

Je continue à obtenir cette erreur (la même chose lorsque j'essaie de créer un tableau)

Aucune suggestion? Je suis vraiment confus!

Était-ce utile?

La solution

Le message sur le «paramètre SQL manquant». Cela ne semble pas être la véritable erreur.

Quand j'ai bien compris le problème, Il n'est actuellement pas possible de publier des données sur des tables de fusion en utilisant JavaScript. Si GFT envoyait des en-têtes CORS appropriés pour les demandes de poste, cela pourrait réellement fonctionner. Mais ce n'est pas le cas pour l'instant.

Voir le numéro 554 (http://code.google.com/p/fusion-tables/issues/detail?id=554).

Autres conseils

Essayez d'ajouter un en-tête de longueur de contenu à la demande:

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

De plus, je recommanderais d'envoyer la demande ClientLogin en tant que demande de poste plutôt que la demande GET, afin que le nom d'utilisateur et le mot de passe ne soient pas envoyés dans le cadre de l'URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top