我一直试图在我的网站上找出这个问题一段时间了 - 我有一堆用户可以点击的“星星”。
点击星星将文件加载到div中,其中包含有关该星的信息。它还加载了一个按钮,供玩家点击并“接管”地球。然而,这一切都运作得很好 - 我最近发现了一个我不太确定如何处理的问题。
如果玩家在重新加载页面之前点击了多个星星,无论出于何种原因 - 当点击攻击/无论是星星时 - 它将在服务器上发送多个请求。我起初认为这是我的编码中发送有关所有星星的所有信息的东西,但我已经意识到它只是玩家点击过的星星。
现在 - 这是代码:
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false
});
function loadStatus()
{
$.ajax(
{
url:'world1.php', error: function () { }, dataType:'json',
success: function(data)
{
denial = false;
$('#credits').html(data.credits);
$('#fuelleft').html(data.fuel);
$('#energyleft').html(data.energy);
}
});
}
function currentStarMapURL(URL)
{
$('#starmap').load(URL, {},
function()
{
$('#loader').hide();
fullStarInformation(URL);
starInformation();
setInterval(function() { $('.unknown').effect("highlight",{color:"#800000"}, 1500)});
return false;
}
);
}
/*
purhcase upgrades
*/
/*
Retriever Better Star Info
*/
function fullStarInformation()
{
$(".star").click(
function()
{
$('#planet-bar').empty();
val = this.id;
url = "planet.php?sid="+val;
$('#planet-bar').load(url, {'sid':val},
function()
{
colony(url);
}
);
}
);
}
function colony(url)
{
$('#planet-bar').on("click", "button",
function() {
event.preventDefault();
name = 0;
$(this).hide();
name = $(this).attr('sid');
$.post('purchase.php?mode=planet', {sid: name},
function ()
{
$('#planet-bar').load(url, {}, function () { currentStarMapURL(URL2); })
}
);
$(this).prop('disabled', true);
});
}
我首先想到问题是缓存问题,所以我将$ .ajaxSetup添加到第一行,但这似乎没有改变任何东西。 然后我想,也许这就是调用代码的方式 - 我最初有两个单独的函数;一个用于攻击,一个用于殖民。这两个都是在fullStarInformation函数中调用的,所以我将它全部移动到一个函数,我仍然遇到问题。
AFAIK,现在,我可能不得不重写整个代码块,以便colony函数和starInformation函数是分开的而不是相互作用。但是在我做这个之前,我想在代码上得到第二,第三甚至第四组。
答案 0 :(得分:1)
如果您要获得多个ajax调用,则可能是在设置多个事件处理程序。 只是快速浏览代码,我认为你应该改变
function colony(url)
{
$('#planet-bar').on("click", "button", function() { ... } );
要
function colony(url)
{
$('#planet-bar').off("click", "button"); //unbind old event handlers
$('#planet-bar').on("click", "button", function() { ... } );