我在我的MVC应用程序中使用jQuery ajax版本1.4.1(尽管我正在讨论的问题与旧的jQuery版本3.2.1相同),如果用户名已经注册,则在客户注册期间进行检查.当用户单击“检查可用性”按钮时,在检查服务器上的可用性,然后显示消息时,我将显示一个繁忙的图像代替检查按钮(实际上隐藏检查按钮并显示图像).它是一个Sync调用(async:false),我使用beforeSend:并完成:显示和隐藏忙图和检查按钮.这个东西在Firefox上工作得很好,但在IE 8和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); } }); }
解决方法
我找到了我的问题的答案.实际上是同步调用(async = false),这正在使IE疯狂.我删除了,并调整代码,一切都正常工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。