异步:假不工作

时间:2016-11-07 14:54:46

标签: jquery ajax asynchronous

我正在使用async:false。因此,在success函数的情况下,它应该等到它从函数得到响应并且应该停止执行success函数之后的代码。

但是它执行后面的代码。不应该async锁定这个过程吗?现在在我的情况下,我正在制作$('#val1loading').text('loading'),它必须继续显示加载,直到它从ajax调用获得成功。但它没有。

$("#val").change(function() {
$('#val1loading').text('loading');

if ($('#val').val() != '') {
    $.ajax({
        url: "Functions.php",
        dataType: 'json',
        data: {
            async: false,
            'link': $('#val').val()
        },
        success: function(result) {
            $("#val1").val(result[0]);

        },
        error: function(xhr, status, error) {
            $("#val1").val('');

        }
    });
} else {
    //some code
}
$('#val1loading').text('');

});

3 个答案:

答案 0 :(得分:2)

async: false应位于传递给$.ajax的主对象中,而不包含在data子对象中。

也就是说,使用同步AJAX几乎总是一个坏主意,正是因为它像你在问题中提到的那样“锁定了进程”。

习惯于编写正确的异步代码,其中程序中的每个动作都是通过事件(例如AJAX完成)的回调发生的,或者更好地使用“Promises”,例如:

$('#val').on('change', function() {
    var $val1 = $('#val1');
    var $loading = $('#val1loading');
    var val = this.value.trim();

    if (val.length > 0) {
        $loading.text('loading');
        $.ajax({
            url: "Functions.php",
            dataType: 'json',
            data: { link: val },
        }).then(function(result) {
            $val1.val(result[0]);
        }).fail(function(xhr, status, error) {
            $val1.val('');
        }).always(function() {
            $loading.text('');
        });
    }
});

答案 1 :(得分:0)

我认为不要像这样使用async false。 将其更改为:

    $.ajax({
        url: "Functions.php",
        dataType: 'json',
        data: {'link': $('#val').val()},
        async:false,
        success: function (result) {
            $("#val1").val(result[0]);
        },
        error: function(xhr, status, error) {
            $("#val1").val('');
         }
    });

答案 2 :(得分:0)

async已弃用。为了解决您的问题,请在所有情况下使用$('#val1loading')。text('')。

$("#val").change(function(){
$('#val1loading').text('loading');

if($('#val').val() != '') {
    $.ajax({
            url: "ajaxFunctions.php",
            dataType: 'json',
            data: {'update': 'parser','link': $('#val').val()},
            success: function (result) {
                $('#val1loading').text('');

                $("#val1").val(result[0]);


            },
            error: function(xhr, status, error) {
                $("#val1").val('');
                $('#val1loading').text('');


}
        });
    }else
{
    //some code
}
//$('#val1loading').text('');