getJSON完成回调

getJSON done callback

我每 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);

我找到了部分解决方案,我意识到我可以在处理接收到的数据的函数末尾添加一个回调,这有点等同于不同 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);

你可以这样做。不要在 getData 中处理数据或使用回调,而是利用 $.getJSON returns 的 承诺 。有一个单独的函数,由调用数据的超时调用,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);

这是我想出的解决方案。

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/