我有一个用python编写的开源软件,该软件使用bottle Web服务器在Web浏览器中显示表单。表单数据通过“方法=发布”发送到Web服务器。到目前为止,服务器进程与浏览器在同一(PC)主机上运行,因此Internet连接没有问题。
现在,我必须重写此软件,以便它可以在移动设备上使用,并且服务器位于Internet上。进行数据输入的环境将可能导致互联网连接不稳定或丢失。因此,我必须为以下情况做好准备:首先加载包含表单的网站(例如,通过WLAN在办公室),然后进行数据输入(在“字段”中),并且在数据输入过程中,互联网连接丢失,这样就无法将数据保存到服务器。在这种情况下,能够在本地保存表单数据非常好,以便以后发送后期请求。 (可能无法一直保持网站打开状态,直到出现这种情况。最新的情况是电池电量不足,我会遇到问题。)
可能我不是第一个遇到此问题的人,所以我的问题是:是否有一种“标准”(或经过良好测试)的解决方案,用于任务在后请求时在客户端缓存表单数据无法回答,以后再发送相同的请求?如果没有,您将如何解决该问题?特别是,我看到以下(子)问题:
我足够精通python来敢于从事这个项目,但是对于Web技术来说还是一个新手,所以如果问题的某些部分相当愚蠢,请原谅。在这种情况下,非常感谢您告诉我...(...关于如何提出更好的问题的提示。)
非常感谢您的帮助。
答案 0 :(得分:0)
我将根据(子)问题尝试回答:
如何(在客户端)检测到发帖请求失败?可能必须使用javascript中的某种超时机制,但是如何?
timeout
选项,如果完成请求的时间超过给定的时间,则会取消该请求如果您不使用jquery,我想您可以在原始javascript 中使用fetch
做类似的事情(单击here了解有关fetch
的更多信息)
$.ajax({
timeout: 3000 // sets timeout to 3 seconds
}).done(function () {
console.log("success");
}).fail(function () {
console.log("error");
var _local = localStorage.getItem('data-saved'); //get localStorage data
_local.push({"key": "value"}) // Append JSON based Form data
localStorage.setItem('data-saved', JSON.stringify(_local)); // Update localStorage
});
如何保存数据?我的第一个想法是使用javascript将数据保存到cookie。我在这里忽略了什么吗?
localStorage
在LocalStorage中,您无法存储JSON,但是可以使用JSON.stringify
保存并使用JSON.parse
进行加载
// Get data
var get_local_data = JSON.parse(localStorage.getItem('data-saved'));
// Update Data
get_local_data.append({"Name": "value", "age": 10})
// Update localStorage
localStorage.setItem('data-saved', JSON.stringify(get_local_data));
以后如何发送数据?
setTimeout
方法发送回数据连续检查localStorage的密钥中是否有任何数据。如果有的话,向后端发送ajax请求!
// Run in each 5 Sec
setTimeout(function () {
// Check if we have any failed data
var get_local_data = JSON.parse(localStorage.getItem('data-saved'));
if(get_local_data.length > 0){
//Make a ajax request
//Update localStorage if success (You need to remove the data from the localStorage),
//Ignored failed case
}
}, 5000);