gpt4 book ai didi

JavaScript 返回错误值

转载 作者:行者123 更新时间:2023-11-28 08:48:09 25 4
gpt4 key购买 nike

我有一个函数,它从 AJAX 调用返回数据,以确定用户是否还有剩余积分,然后相应地显示数据。奇怪的是该函数没有返回预期的结果。这是代码:

function setupBuildInputs() {
noCreditsError = '<div class="alert alert-danger">You have no build credits remaining, please contact a representative to purchase more.</div>';

if ( $('#newWebsiteBuildForm #user_id').length ) {
$('#newWebsiteBuildForm #user_id').change(function () {
userID = $(this).val();
jQuery.get(SITE_URL + '/ajax.php?action=getBuildCreditsRemaining&id=' + userID, function(numOfCredits) {
if ( numOfCredits > 0 ) {
// Get latest website URL and show it on the page
$('#websiteURLHolder').html('Updating...');
jQuery.get(SITE_URL + '/ajax.php?action=getNextWebsiteUsername&id=' + userID, function(data) {
$('#websiteURLHolder').html(data + '.checkoutyournewsite.com');
});
} else {
$('#quickBuildTagsHolder').html( noCreditsError );
}
});
});
}
$('#newWebsiteBuildForm #template').change(function () {
// Show the build form items
numOfRemainingCredits = checkBuildCredits( $('#newWebsiteBuildForm #user_id').val() );
alert(numOfRemainingCredits);

if ( numOfRemainingCredits > 0 ) {
$('#quickBuildTagsHolder').html('Updating...');
jQuery.get(SITE_URL + '/ajax.php?action=returnQuickBuildTags&template=' + $(this).val(), function(data) {
$('#quickBuildTagsHolder').html(data);
});
} else {
$('#quickBuildTagsHolder').html( noCreditsError );
}
});
}
function checkBuildCredits( userID ) {
buildCredits = 0;

jQuery.get(SITE_URL + '/ajax.php?action=getBuildCreditsRemaining&id=' + userID, function(data) {
buildCredits = data;
});

return buildCredits;
}

setupBuildInputs();

使用 firebug,我可以看到对 ajax.php?action=getBuildCreditsRemaining 的调用从页面中提取了正确的 id 并返回了正确的值 (9999)。为了进一步调试,我在第二个更改事件处理程序上添加了警报,结果返回为 0 而不是 9999。

接下来我添加了 2 个警报,甚至还添加了 checkBuildCredits 函数。第一个验证了 ajax 调用是否有效,并且数据设置为 9999。第二个奇怪的是,在函数返回之前,buildCredits 仍然设置为 0。

在 setupBuildInputs 函数中,第一个更改处理程序使用相同的 ajax 调用并且工作正常,使用这些函数的第二个更改处理程序当然会失败,因为它没有得到 9999 而是看到 0。

知道这里发生了什么吗?

最佳答案

用此替换 checkBuildCredits

function checkBuildCredits( userID, successFn ) {


jQuery.get(SITE_URL + '/ajax.php?action=getBuildCreditsRemaining&id=' + userID, function(data) {
successFn(data);
});

}

然后当你调用 checkBuildCredits 时,这样做

checkBuildCredits( $('#newWebsiteBuildForm #user_id').val(), function(numOfRemainingCredits )
{
if ( numOfRemainingCredits > 0 ) {
$('#quickBuildTagsHolder').html('Updating...');
jQuery.get(SITE_URL + '/ajax.php?action=returnQuickBuildTags&template=' + $(this).val(), function(data) {
$('#quickBuildTagsHolder').html(data);
});
} else {
$('#quickBuildTagsHolder').html( noCreditsError );
}

});

正如其他人所解释的,jquery.get 是异步的。根据您的设计,您将 jquery.get 视为同步调用。

关于JavaScript 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496839/

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