$ .ajax奇怪的订单电话

时间:2017-03-22 13:28:15

标签: javascript jquery ajax

首先,我为我未来的英语半级语言道歉。

我来找你,因为我的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秒。 (所以它同时开始和停止,我们什么也看不见。)

有人能帮助我吗??

提前谢谢你,

大卫,

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;冻结所有网页,并且不允许任何移动或点击任何按钮,等待服务器响应。 实际上按钮在旋转,但我们无法看到他这样做。

再次感谢你:)