通过Javascript更新Fusion表

时间:2014-02-05 23:20:48

标签: javascript google-maps google-maps-api-3 google-fusion-tables google-oauth

所以我一直在尝试通过此处指定的Google Fusion表API更新融合表:

https://developers.google.com/fusiontables/docs/v1/using#updateRow

我相信我遇到了身份验证问题。我一直在尝试使用OAuth 2.0进行身份验证。

首先是问题所在。这就是我一般在构建这个东西的方式。首先,我使用融合表中的信息填充我想要更新的项目数组:

$(document).ready(function () {
        $.ajax({
            cache: false,
            async: true,
            type: "GET",
            dataType: "json",
            url: "https://www.googleapis.com/fusiontables/v1/query?sql=SELECT ROWID, ThreePartAddress, Latitude, Longitude FROM <table name> WHERE Latitude != '0' AND Longitude != '0' LIMIT 100&key=<key name>",
            contentType: "application/json;charset=utf-8",
            success: function (m) { if (m != null) { meetings = m; } },
            error: function (e) { console.log(e.statusText); }
        });
    });

meetings变量存储我想要更新的中间表数据。现在我对拉出的地址进行地理编码,然后想要转换它并存储坐标。我使用地理编码api(它只监听前10个请求,这是我完全猜测的另一个问题)。

function ProcessLatLng(geocoder, i, rows) {
        geocoder.geocode({ 'address': rows[i][1] },
            function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    // fire a query to update our lat lng
                    rows[i][2] = results[0].geometry.location.lat();
                    rows[i][3] = results[0].geometry.location.lng();
                }
                else {
                    console.log('error geo: ' + status);
                }
            }
        );
    }

现在我在这里遇到问题。我下载并在OAuth中获取登录令牌。我从StackOverflow上的另一个问题中提取了这个。它似乎工作但只有一次。我从谷歌获取了我的客户端ID:

var GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/auth";
     var GOOGLE_CLIENT_ID = "blahblah.apps.googleusercontent.com";
     var PLUS_ME_SCOPE = "https://www.googleapis.com/auth/plus.me";

     var button = document.createElement("button");
     button.innerText = "Authenticate with Google";
     button.onclick = function() {
       var req = {
         "authUrl" : GOOGLE_AUTH_URL,
         "clientId" : GOOGLE_CLIENT_ID,
         "scopes" : [ PLUS_ME_SCOPE ],
       };
       oauth2.login(req, function(token) {
            loginToken = token;
           }, function(error) {
             alert("Error:\n" + error);
           });
     };
     document.body.appendChild(button);

我查看另一个功能的纬度和经度并更新会议。然后我开始循环遍历该数组。我开始构建一个查询来更新表名,然后发出一个POST请求来让这个东西继续下去。

function uploadLatLngs() {
        for (row = 1; // first row (0) is column headers
                meetings.rows.length > row;
                row++) {

            var lat = meetings.rows[row][2];
            var lng = meetings.rows[row][3];
            if (lat != '' && lat != null && lng != '' && lng != null && !(lat == 0 && lng == 0)) {
                var data = "?sql=UPDATE <table name> SET Latitude = " + lat + ", Longitude = " + lng + " WHERE ROWID = '" + meetings.rows[row][0] + "'";

                var url = "https://www.google.com/fusiontables/v1/query/" + data;

                //"&access_token=" + loginToken;

                $.ajax({
                    type: "POST",
                    contentType: "application/json",
                    url: url,
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("Authorization", "Bearer " + loginToken);
                    },
                    success: function run(data) { console.log(data); }
                });
            }
        }
    }

当我开始触发这些请求时,每次都会收到CORS访问错误。

OPTIONS https://www.google.com/fusiontables/v1/query/?sql=UPDATE%<Table name>,%20Longitude%20=%20-77.09161899999998%20WHERE%20ROWID%20=%20%2725%27 405 (Method Not Allowed) jquery-1.4.2.min.js:128
OPTIONS https://www.google.com/fusiontables/v1/query/?sql=UPDATE%20<table name>,%20Longitude%20=%20-77.09161899999998%20WHERE%20ROWID%20=%20%2725%27 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:53104' is therefore not allowed access.

我曾经只见过这项工作,如果我使用:https://developers.google.com/oauthplayground/生成访问令牌,似乎只会发生这种情况。我似乎无法使用我自己的客户端ID。

我在这里缺少什么?这是我的谷歌开发者控制台的“某种”视图:

Client ID for web application
Client ID   XXXX
Email address   XXX
Client secret   XXXX
Redirect URIs   http://localhost:53104/GoogleMapsTest/Testing/oauthWindow.html
Javascript Origins  http://localhost:53104

oauthWindow是我正在授权的窗口

0 个答案:

没有答案