gpt4 book ai didi

jquery - 如何避免由于太多ajax调用而导致浏览器出现内存不足错误

转载 作者:可可西里 更新时间:2023-11-01 08:32:53 24 4
gpt4 key购买 nike

我正在构建一个 Web 应用程序,它需要使用 jquery ajax shortform 一次进行大约 28000 个数据库调用。

它顺利通过了大约 6000 次调用,但随后浏览器在浏览器控制台中给出了大约 20000 次以下错误(每次调用一个):

POST(我的数据库调用)net::ERR_INSUFFICIENT_RESOURCES

有谁知道如何解决这个问题?也许创建一个缓冲区或什么的?

谢谢!

编辑 1:添加一些代码:

好吧,所以用户会填写一些值(比如 GHI > 4500,纵横比在 157.5 和 202.5 之间)

将进行以下调用:

loadAllData('ghi', 4500, findIdealPoints);

这个调用导致了这个函数:

function loadAllData(type, above, callback){
var data = {};
$.post('php/getIdealData.php?action=get&type='+type+'&above='+above, data, callback);

在 PHP 中运行此查询:

 "SELECT  `GHI` ,  `lat` ,  `long` 
FROM solar
WHERE `GHI` >'{$_GET['above']}' ORDER BY `lat`,`long`;";

它以 JSON 格式返回一个数组中的大约 28880 条记录,并调用执行以下操作的回调方法:

function findIdealPoints(data){
var i = 0;
while (i < data.length){
loadAspectWithinRange('aspect', data[i]['lat'], data[i]['long'], 10, compareWithAspect);
i++;
}

运行这个 php 查询:

"SELECT `aspect`,
`lat`, `long`, distance_in_km
FROM (
SELECT `aspect`, `lat`, `long`,r,
(6378.10 * ACOS(COS(RADIANS(latpoint))
* COS(RADIANS(`lat`))
* COS(RADIANS(longpoint) - RADIANS(`long`))
+ SIN(RADIANS(latpoint))
* SIN(RADIANS(`lat`)))) AS distance_in_km
FROM aspect
JOIN (
SELECT '{$_GET['lat']}' AS latpoint, '{$_GET['long']}' AS longpoint, 10.0 AS r
) AS p
WHERE `lat`
BETWEEN latpoint - (r / 111.045)
AND latpoint + (r / 111.045)
AND `long`
BETWEEN longpoint - (r / (111.045 * COS(RADIANS(latpoint))))
AND longpoint + (r / (111.045 * COS(RADIANS(latpoint))))
AND `aspect`
BETWEEN '{$_GET['lowA']}' AND '{$_GET['highA']}'
) d
WHERE distance_in_km <= r
ORDER BY distance_in_km";

然后转到运行它的回调函数:

function compareWithAspect(data){
var idealPoints =[];
for (var i=0; i<data.length; i++){
idealPoints.push(new google.maps.LatLng(data[i]['lat'], data[i]['long']));
}

if (idealPoints.length > 1){
makePolygon(idealPoints)
}
}

并且 makePolygon 只是使用 Google Maps API 在 map 上绘制。

我知道它很多而且看起来很复杂,如果有人能告诉我一个更好的方法来做到这一点,我会很高兴!

再次感谢

最佳答案

你可以这样做。

function findIdealPoints(data){
var i = 0;
while (i < data.length){
loadAspectWithinRange('aspect', data[i]['lat'], data[i]['long'], 10,
compareWithAspect);
i++;
}

不是每次都进行 Ajax 调用,而是将数据对象发送到您的调用

 loadAspectWithinRange('aspect',data,10,compareWithAspect)

然后在 Ajax 请求中将对象数组发送到您的服务并检索所有对象的结果,而不是一个一个地检索结果。

$.ajax({
url:"...",
data:{
attr1:'aspect',
points: data(here is the array retrieved from "getIdealData.php")
attr2: 10
},
success:function(data){
compareWithAspect(data)
}
})

在服务器端处理中,为 getIdealData.php 点上的所有元素构建一个对象数组。

这比为每个元素执行 Ajax 会更好

关于jquery - 如何避免由于太多ajax调用而导致浏览器出现内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22334933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com