Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Google Fusion表返回单个值_Javascript_Google Fusion Tables - Fatal编程技术网

Javascript 从Google Fusion表返回单个值

Javascript 从Google Fusion表返回单个值,javascript,google-fusion-tables,Javascript,Google Fusion Tables,我试图从Google Fusion表中检索单个值,但由于调用的异步性质,在检索时遇到了问题。有什么办法吗?以下是我迄今为止所尝试的: function getVal() { var queryText = encodeURIComponent(query); var gvizQuery = new google.visualization.Query( 'http://www.google.com/fusiontables/gvizdata?tq=' + que

我试图从Google Fusion表中检索单个值,但由于调用的异步性质,在检索时遇到了问题。有什么办法吗?以下是我迄今为止所尝试的:

function getVal() {
    var queryText = encodeURIComponent(query);

    var gvizQuery = new google.visualization.Query(
        'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);

        gvizQuery.send(function (response) {
                var dt = response.getDataTable()
                alert(dt.getValue(0, 0)); // Works, returns a value

                return dt.getValue(0, 0);
    });

var value = getVal(); // Undefined

我将回答你在评论中提出的问题,因为这更清楚,我想这就是你想要解决的问题

使用Javascript来处理此类异步调用。(JS概述)

承诺将帮助您等待响应,然后在同一台计算机上执行操作

一个例子-

if (window.Promise) {
  console.log('Promise found');

  var promise = new Promise(function(resolve, reject) {
    var request = new XMLHttpRequest();

    request.open('GET', 'http://api.icndb.com/jokes/random');
    request.onload = function() {
      if (request.status == 200) {
        resolve(request.response); // we got data here, so resolve the Promise
      } else {
        reject(Error(request.statusText)); // status is not 200 OK, so reject
      }
    };

    request.onerror = function() {
      reject(Error('Error fetching data.')); // error occurred, reject the  Promise
    };

    request.send(); //send the request
  });

  console.log('Asynchronous request made.');

  promise.then(function(data) {
    console.log('Got data! Promise fulfilled.');
    document.getElementsByTagName('body')[0].textContent = JSON.parse(data).value.joke;
  }, function(error) {
    console.log('Promise rejected.');
    console.log(error.message);
  });
} else {
  console.log('Promise not available');
}
您的示例应该与此类似-

function getVal() {
  var promise = new Promise(function(resolve, reject) {
    var queryText = encodeURIComponent(query);

    var gvizQuery = new google.visualization.Query(
        'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);

        gvizQuery.send(function (response) {
                var dt = response.getDataTable()

                resolve(dt.getValue(0, 0));
    });
  reject(false);
  }
}
var value = getVal();

请阅读Javascript承诺,它将对您有很大帮助。

很抱歉,但我的问题是,异步性质如何影响您返回单个值?你的意思是
dt.getValue(0,0)
返回的是未定义的值吗?更清楚地说,dt.getValue(0,0)在函数(响应)部分返回一个值,但在我返回值时不是。例如var value=getVal();//返回未定义非常感谢,我一直在研究许多不同的方法,但我无法集中精力处理响应。很高兴知道这有帮助!:)快乐编码!