2012-01-23 1 views
2

gooles fusion 테이블을 중앙 데이터베이스로 사용하는 작은 Chrome 확장 프로그램을 작성하고 싶습니다.Google 퓨전 테이블 (삽입, 테이블 추가 등)에서 변경할 수 없습니다.

기존 테이블과 데이터 (GooleDoc-Webside를 통해 추가)를 사용하면 매우 좋지만 (SELECT, SHOW TABLES, DESCRIBE), 변경 작업을 수행하려고하면 "POST"요청이 필요합니다. 난 항상 다음과 같은 오류가 발생합니다 : "Missing sql parameter." 나는 이런 일이 일어나는 이유가 없다. 나는 많이 이미 시도 (예 : "테이블 TEST3 (A 작성 : 수) : 번호, B"를 삽입합니다.)

내가 쓴 코드는 다음과 같다 :

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 = "[email protected]"; 
    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; 
} 

내가 예를 들어 수행하려고 할 경우 이

01에 의해 설명이

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) 

, 뭔가 23,516,

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

내가

어떤 제안 (I 테이블을 만들려고 할 때 같은)이 오류가 계속? 나는 정말로 혼란스러워!

답변

2

"Missing sql parameter."에 대한 메시지입니다. 진짜 실수가 아닌 것 같습니다.

문제를 올바르게 이해하면 현재 JavaScript을 사용하여 데이터를 퓨전 테이블에 POST 할 수 없습니다. GFT가 POST 요청에 대해 적절한 CORS 헤더를 보내면 실제로 작동 할 수 있습니다. 그러나 현재로서는 그렇지 않습니다.

문제 554 (http://code.google.com/p/fusion-tables/issues/detail?id=554)를 참조하십시오.

+1

그동안 Google은 Trusted Testers에서 사용할 수있는 _new_ API를 발표했습니다.이 그룹에 가입하려면 (https://groups.google.com/forum/?fromgroups#!forum/fusion-tables- API 테스터). 거기에서 예제와 JavaScript 클라이언트 라이브러리를 찾을 수 있습니다. – Odi

0

봅니다 요청에 콘텐츠 길이 헤더를 추가 : 사용자 이름과 암호가 전송되지 않도록, 또한

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

, 나는 오히려 GET 요청보다 POST 요청으로 ClientLogin에 요청을 전송 추천 URL의 일부로

+0

안녕, 나는 POST 요청에 loign을 변경하고 (이하 "경고"점점 : "콘텐츠 길이를"안전하지 않은 헤더를 설정 거부)를 컨텐츠 길이를 추가했다. 그러나 동작은 계속 동일하게 유지됩니다! 답장을 보내 주셔서 감사합니다. – janosch