我在我的MVC应用程序中使用jQuery ajax版本1.4.1(虽然我讨论的问题与旧版本的jQuery 3.2.1 ),以便在用户注册期间检查用户名是否已经注册。当用户点击“检查可用性”按钮时,我检查服务器上的可用性,然后显示一条消息,同时显示忙图像来代替检查按钮(实际上隐藏检查按钮并显示图像)。这是一个同步调用(async:false),我使用beforeSend:和complete:显示和隐藏忙图像和检查按钮。这个东西在Firefox上运行的很好,但在IE 8和Chrome中,既没有显示繁忙的图像,也没有隐藏检查按钮,而是在整个事件挂起时仍然按住检查按钮。可用和不可用的消息显示正确。下面是代码:jQuery Ajax(beforeSend和complete)在FireFox上正常工作,但不在IE8和Chrome上
HTML在用户控件(ASCX):
<div id="available">This Username is Available</div>
div id="not_available">This Username is not available</div>
<input id="txtUsername" name="txtUsername" type="text" size="50" />
<button id="check" name="check" type="button">Check Availability</button>
<img id="busy" src="/Content/Images/busy.gif" />
在此用户控件的顶部,我连接一个外部的JavaScript文件具有以下代码:
$(document).ready(function() {
$('img#busy').hide();
$('div#available').hide();
$('div#not_available').hide();
$("button#check").click(function() {
var available = checkUsername($("input#txtUsername").val());
if (available == "1") {
$("div#available").show();
$("div#not_available").hide();
}
else {
$("div#available").hide();
$("div#not_available").show();
}
});
});
function checkUsername(username) {
$.ajax({
type: "POST",
url: "/SomeController/SomeAction",
data: { "id": username },
timeout: 3000,
async: false,
beforeSend: function() {
$("button#check").hide();
$("img#busy").show();
},
complete: function() {
$("button#check").show();
$("img#busy").hide();
},
cache: false,
success: function(result) {
return result;
},
error: function(error) {
$("img#busy").hide();
$("button#check").show();
alert("Some problems have occured. Please try again later: " + error);
}
});
}
社区发生了什么事? 18人查看了这个问题,但2天后没人回答。这真的很复杂,或者我没有正确地问它吗? – 2010-02-12 07:05:17
如果您将true设置为true或false,您确定可以将其与'1'进行比较。如果(可用)应该是足够的...这不会回答你的问题:-) – Kennethvr 2010-02-12 07:42:41
谢谢,是的,我注意到,虽然试图找出实际问题,我也修复这个东西,但如预期的 - 它没有做任何不同。我将使用此更改更新上面的代码。 – 2010-02-12 07:50:13