将 100 个点添加到数据库的最简单/最快的方法是什么?请假设由于重复、错误数据等原因,所有写入都不会工作。
我正在尝试使用恰好 100 个值更新数据库。
一旦我有了一份好的数据,我需要将它添加到数据库中,我使用一个名为 updateDB 的函数。
此函数只是将纬度/经度坐标写入数据库。如果存在重复或写入失败,我从 php 发送“错误”并且循环应该继续收集数据,直到我有正好 100 个点到数据库。这是我正在使用的功能。
cct是用来防止xss的,请无视,这个没问题。
////more above this
if(100-completed > dispatched)
dispatched++;
updateDB(lat,lng);
/// more junk and then this function
function updateDB(lat,lng)
{
var cct = $("input[name=csrf_mysite]").val();
$.ajax({
type: "POST",
url: "/form",
data: {
'lat': lat,
'lng': lng,
'id_set': id_set,
'csrf_complexity': cct },
success: function(result) {
var obj = jQuery.parseJSON(result);
if( obj.status === "OK" )
{
completed++;
var marker = new google.maps.Marker(
{
icon: markerIcon,
position: new google.maps.LatLng(lat, lng),
map: map
});
$( "#progressbar" ).progressbar( "option", {
value: completed,
max: 100
});
$("#amount").text("Getting image " + completed + " of 100");
}
},
error: function(data){
//alert(data.responseText);
},
complete: function(data){
if(completed == 100)
window.location = "/start/curate";
dispatched--;
}
});
}
此功能无效。那么知道为什么吗?
它应该可以简单地工作。调用 updateDB 直到它达到 100 个附加值,并且仅在不可能有额外调用时才调用 updateDB。 Dispatch 没有正确递减,所以我假设没有在每个事件上调用 complete。
想法?或者任何其他方式都很棒。
最佳答案
为什么不让服务器代码处理计数并只发送一个(或几个)查询?例如。首先构造一个包含 100 个数据点的数组,在单个查询中将数据发送到服务器,并让它响应它还需要多少个数据点,然后发回那么多数据点,然后再重复一次,直到得到 100 个数据点。
如果客户端获取每条数据的开销很低,获取不需要的数据也可以,那么一开始就发送(比如说)110。通过对故障率的一些了解,您应该能够轻松地对其进行优化。
您一次只能有(我相信)两个同步异步查询,无论如何,不管是否异步,都需要很长时间才能完成。我想不出有什么理由不尽可能多地对数据进行分组,并将查询数量减少到 1 个或少数几个。即使您仍然在服务器上运行 100 个数据库查询,与 HTTP 发布/响应的开销相比,这样做的时间也微不足道。
关于php - 使用 ajax 向数据库添加恰好 100 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456035/