我一直在研究一个需要我使用Ajax的项目。在过去,我使用它创建一个项目没有任何问题,但这次每个请求至少花费1秒钟,这当然太长了。
我不能给你整个代码,但我会尽可能多地分享。请求如下:
/* *
* Update the navigation screen
*/
function UpdateNavigation() {
$.ajax({
type: "POST",
url: "application/controllers/LocationController.php",
dataType: "json",
data: "action=GetSurroundings",
success: function(data){
$("#direction-north").html((typeof data.north != 'undefined' ? data.north : "") + '</br> North');
$("#direction-west").html((typeof data.west != 'undefined' ? data.west : "") + '</br> West');
$("#direction-center").html((typeof data.center != 'undefined' ? data.center : "") + '</br> Center');
$("#direction-east").html((typeof data.east != 'undefined' ? data.east : "") + '</br> East');
$("#direction-south").html((typeof data.south != 'undefined' ? data.south : "") + '</br> South');
}
});
}
/* *
* Update the current location
*/
$('#navigation-list :button').click(function(event) {
if (event.target.id == "direction-center")
return;
$.ajax({
type: "POST",
url: "application/controllers/LocationController.php",
data: "action=SetLocation&value=" + event.target.id,
success: function() {
UpdateNavigation();
}
});
});
据我所知,这样可以。改变它可能是一个好主意,但据我所知它不应该导致延迟。 LocationController文件非常大,但是它针对不同的情况使用了一个开关,所以实际执行的代码不是那么大。
使用FireBug我发现第一个请求正在等待1.01秒,第二个请求则等待1.00秒。我做了一些研究,人们告诉我,这可能是因为服务器太忙而无法正确处理您的请求,这就是为什么它需要这么长时间。但这似乎不太可能,因为代码和数据库是本地托管的。请求中不应存在冲突,因为它们一次只执行一次。
我在这里不知所措。我不知道如何开始调试这个问题。删除部分代码没有帮助,因为它要么全部停止执行,要么只停留1秒以上。这让我相信代码不是问题,虽然我可能是错的。
任何帮助都会受到极大的折磨!如果您需要更多信息,请不要犹豫。
编辑:更多的挖掘让我相信代码中的查询可能有问题?如果是这样,我正在使用以下(非常丑陋的)查询:
SELECT
character_location.block,
character_location.location
FROM
character_location
WHERE
character_location.id = 1
LIMIT
1
SELECT
zones.name,
zones.location,
zones.block
FROM
zones
WHERE
(
`zones`.`location` = (".$getBlock['location']." - 1)
AND
zones.block = '".$playerBlock."'
)
OR
(
`zones`.`location` = ".$getBlock['location']."
AND
zones.block = '".$playerBlock."'
)
OR
(
`zones`.`location` = (".$getBlock['location']." + 1)
AND
zones.block = '".$playerBlock."'
)
OR
(
`zones`.`location` = ".$getBlock['location']."
AND
zones.block = '".$playerBlockDown."'
)
OR
(
`zones`.`location` = ".$getBlock['location']."
AND
zones.block = '".$playerBlockUp."'
)
LIMIT
5
UPDATE
character_location
SET
character_location.block = '" . $targetBlock . "',
`character_location`.`location` = " . $targetLocation . "
WHERE
character_location.id = 1
猜猜我认为哪一个可能导致问题?
答案 0 :(得分:2)
如果您使用PDO进行连接。
而不是使用localhost
作为主持人使用127.0.0.1