getJSON完成回调

时间:2017-12-03 00:17:05

标签: javascript jquery callback getjson

我每5秒钟调用一次函数来从服务器获取数据,即flask / python。我的问题是如何在成功检索数据时调整getjson调用以进行回调。

我知道那里.done .fail等等,但我想知道我是否可以保留这个结构并且只是添加它,但我不知道这个特殊情况下的语法,希望这不是太令人困惑,感谢阅读,这里是代码。

// get data from the server every getDataFromServerInterval milliseconds
var getDataFromServerInterval = 5000;
function getData(){
  // request timesince table entries from server for user...
  $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // do something with the response data
    timesince_dataBuffer = data;
  });
  return false; // prevent get
}
// get data from the server every getDataFromServerInterval milliseconds
setInterval(getData, getDataFromServerInterval);

3 个答案:

答案 0 :(得分:1)

你可以这样做。而不是处理getData中的数据或使用回调,而是利用$.getJSON返回的承诺。有一个单独的函数,由超时调用,调用数据,then处理它。它巧妙地将您的代码分离为更多可管理的函数。

var getDataFromServerInterval = 5000;

function getData() {
  return $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }
}

function wrangleData() {
  getData().then(function (data) {
    console.log(data);
  });
}

setInterval(wrangleData, getDataFromServerInterval);

答案 1 :(得分:0)

我发现了一个部分解决方案,我意识到我可以在处理收到的数据的函数末尾添加一个回调,这在一个不同的getjson调用结构中有点等同于.done,我不确定但是如果在收到数据之前或之后调用该函数。

// global timesince buffer, holds
var timesince_dataBuffer;

// get data from the server every getDataFromServerInterval milliseconds
var getDataFromServerInterval = 5000;
function getData(){
  // request timesince table entries from server for user
  $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // do something with the response data
    timesince_dataBuffer = data;
    updateEntryStruct(); // the hope is to call this when data is received
  });
  return false; // prevent get
}
// get data from the server every getDataFromServerInterval milliseconds
setInterval(getData, getDataFromServerInterval);

答案 2 :(得分:0)

这是我提出的解决方案。

var timesince_dataBuffer;
function getData(){
  // gets user's entries from sql table
  $.getJSON($SCRIPT_ROOT + '/_database', { // $SCRIPT_ROOT, root to the application
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // if a response is sent, this function is called
    timesince_dataBuffer = data;
    updateEntryStruct(); // recreate the structure of each content, buttons etc
  });
  return false;
}

我获取数据,放入一个全局变量,调用另一个获取该数据的函数并为每个接收到的对象重新创建一个结构,这样我就不会重新创建静态的结构部分,最重要的是的按钮。

每1秒调用另一个函数,它会更新动态部分。 (格式化的时间)过去了 (事件名称)

无论如何,这实际上是我在CS50中的最终项目,我开始通过表单提交与服务器通信,每次用户按下按钮刷新页面,然后我通过ajax执行,但我发送请求到服务器每2秒钟,并且没有响应按钮,因为我会在一个时间间隔内继续重新创建按钮。 现在,该页面感觉响应迅速,效率高,这是一次很棒的学习经历。

如果有人想查看代码,一切都在这里。 https://github.com/silvermirai/cs50-final-project

基本上是一堆随机功能浮现在脑海中。 该应用程序现在可以在这里找到。 http://ide502-silvermirai.cs50.io:8080/