我正在使用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('');
});
答案 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('');