首先,我为我未来的英语半级语言道歉。
我来找你,因为我的javascript有一个奇怪的问题。
在这里你可以看到我有这个代码:
addVoucherMaster: function (Code) {
var btns = $('.btn-spin');
btns.empty();
if (btns.find('i.fa-spinner').length == 0) {
$('<i>', { 'class': 'fa fa-spinner fa-pulse' }).appendTo(btns);
}
btns.css('opacity', '.5');
$(".validation-summary-errors").attr('class', 'validation-summary-valid');
$(".validation-summary-valid").children('ul').empty();
var dataSend = {
voucherId: Code,
};
var jsonData = JSON.stringify(dataSend);
var result = null;
if (Code && this.addVoucherUrl) {
$.ajax({
url: this.addVoucherUrl,
type: 'POST',
data: jsonData,
dataType: 'json',
processData: false,
contentType: 'application/json; charset=utf-8',
async: false,
success: function (data) {
result = data.Data;
return data;
}
});
if (result == 'True') {
this.payments();
} else {
var btns = $('.btn-spin');
this.errorVoucher("Incorrect voucher");
btns.css('opacity', 1);
btns.empty();
btns.append('+');
}
}
},
这写得很糟糕,但首先我要更换&#34; +&#34;在带有微调器(加载器)的按钮中,然后我进行ajax查询(异步)并在之后重新执行一些代码。 (所有这些都由data-bind =&#34执行;单击:addVoucherMaster&#34;)
问题从这里开始。 当我使用带有断点的Chrome调试器时,在&#39; btns.css(&#39; opacity&#39;,&#39; .5&#39;)之后;&#39;,我的按钮就像我想要的一样然后响应让我等了1/2秒,我的按钮在结束时停止旋转。
但是,如果没有调试器,在我的按钮开始旋转之前会出现1/2秒。 (所以它同时开始和停止,我们什么也看不见。)
有人能帮助我吗??
提前谢谢你,
大卫,
答案 0 :(得分:0)
将Ajax请求更改为:
$.ajax({
url: this.addVoucherUrl,
type: 'POST',
data: jsonData,
dataType: 'json',
processData: false,
contentType: 'application/json; charset=utf-8',
async: false,
success: function (data) {
result = data.Data;
if (result == 'True') {
this.payments();
} else {
var btns = $('.btn-spin');
this.errorVoucher("Incorrect voucher");
btns.css('opacity', 1);
btns.empty();
btns.append('+');
}
}
});
你的if / else结构可能是在ajax请求仍然忙的时候执行的。
答案 1 :(得分:0)
问题解决了!抱歉给您带来不便,谢谢您的帮助。我已经用async:true替换了async:false,并在request.done()中执行了下一个代码...&#39; async:false&#39;冻结所有网页,并且不允许任何移动或点击任何按钮,等待服务器响应。 实际上按钮在旋转,但我们无法看到他这样做。
再次感谢你:)