javascript - 通过来自多个客户端的 Ajax PUT 请求发送数据
问题描述
我编写了一个小型应用程序,它通过 ajax GET 从服务器获取数据并将这些数据加载到 html 表中。此外,用户可以通过填写表格或通过复选框删除数据来将数据添加到表格中。然后表中的所有数据都通过 ajax PUT 发送到服务器。在发送之前,将有一个 get-request 再次从服务器获取最新数据。到目前为止,一切都很好。
现在我面临的问题是,当网站从多个客户端访问时,第二个 get-request 工作不正常。发送时未添加数据,它被其他用户的条目/输入覆盖。
有谁知道如何解决这个问题?先感谢您!
GET请求
function getMessage() {
// Send HTTP Request
$.ajax({
type: 'GET',
url: endpointUrlGet,
contentType : 'application/json',
success: function(data) {
// Loading data from get request into table
var filter_data = '';
$.each(data, function(index, value) {
filter_data += '<tr>';
filter_data += '<td><input type="checkbox" /></td>';
filter_data += '<td>' + value.nummer+ '</td>';
filter_data += '<td>' + value.start+ '</td>';
filter_data += '<td>' + value.time+ '</td>';
filter_data += '<td>' + value.type+ '</td>';
filter_data += '<td>' + value.start_time+ '</td>';
filter_data += '<td>' + value.end_time+ '</td>';
filter_data += '</tr>';
});
$("#entries").append(filter_data );
},
error: function(d) {
alert("Fehler beim Laden.")
}
})
}
PUT-请求
function sendMessage(payload) {
// Send HTTP Request
$.ajax({
type: 'PUT',
url: endpointUrlPut,
contentType : 'application/json',
data : payload,
statusCode: {
200: function() {
location.reload();
alert("Success.");
},
400: function() {
alert( "Fehler." );
console.log("Bad request.");
},
403: function() {
alert( "Fehler." );
console.log("Forbidden.");
},
404: function() {
alert( "Fehler." );
console.log("Page not found.");
},
500: function() {
alert( "Fehler." );
console.log("Internal Server error.");
},
502: function() {
alert( "Fehler." );
console.log("Bad Gateway.");
},
503: function() {
alert( "Fehler." );
console.log("Service Unavailable.");
}
},
error: function(d) {
alert("Fehler beim Senden.");
}
})
}
方法调用:
$('#submit_btn').click(function() {
getMessage();
sleep(100);
$("#entries input[type='checkbox']:checked").closest("tr").remove();
var table= $('#entries tr:has(td)').map(function(i, v) {
var $td = $('td', this);
return {
nummer: $td.eq(1).text(),
start: $td.eq(2).text(),
time: $td.eq(3).text(),
type: $td.eq(4).text(),
start_time: $td.eq(5).text(),
end_time: $td.eq(6).text()
}
}).get();
// Parses the tabledata into required JSON-format
var data = JSON.stringify({
"env" : "dev",
"allData" : table
})
// Sending the filters via PUT
sendMessage(data);
});
解决方案
我认为它更多的是关于实现而不是你的 Ajax 请求。您需要同步对资源的访问。
我的意思是,是否允许多个客户端同时访问资源?如果允许,更新的依据是什么?我觉得不应允许两个客户端同时访问同一资源,否则会导致数据不一致,就像您的情况一样。您需要应用正确的同步技术来实现所需的输出。希望这很清楚!
推荐阅读
- apache-kafka - Apache Kafka 能否用于汇总每个客户的每小时消费数据?
- javascript - 将对象键从下划线格式更改为驼峰格式
- node-red - 如何在 Node-RED 中附加到 PDF 文件?
- spring-boot - 如何使用具有不同数据并具有两个 JdbcBatchItemWritter 的 Spring 批处理 CompositeItemWriter
- codeigniter - 如何在codeigniter中更改ckfinder的上传目录路径
- keras - 深度学习数据准备
- java - 如何有效地搜索二维数组中的二维数组?
- java - 数据快照中的 Nullpointer exeption 字符串出错
- java - 如何在不使用比较器和可比较器的情况下将对象作为键存储到哈希图中并将其插入到顺序中
- javascript - 带有 php 表单连接器的 DHTMLX - 如何在表单保存时不剥离 html