我正在尝试使用此代码:
$('#form1').on('submit', function(){
var txtItemCode = $('#txtItemCode').val();
$.post("userExist.php", {
txtItemCode: txtItemCode,
}, function(data,status){
//alert("Data: " + data + "\nStatus: " + status);
$('#status').html(data);
reply = data;
//alert(reply);
});
alert('');
if (reply=='OK'){
return false;
}
});
我需要检查data=="OK"
是否返回false,但是当我删除alert
时,它就不再有效了。为什么会这样,我怎样才能使它发挥作用?
答案 0 :(得分:4)
引入警报时它起作用的原因是它停止执行并为异步调用提供足够的时间来完成。
您没有获得正确的值,因为在完成发布请求并执行回调时,您的javascript已经完成执行。
你有几个选择:
$.ajaxSetup({ async: false })
。将返回值分配给全局变量并对其进行验证。$(document).ajaxStop(function() { //check your values here, still need to declare a global });
答案 1 :(得分:3)
在你的代码中,ajax调用是异步的,所以无论你是否被响应,你的下一行都将被执行。在同步调用中,您的下一行将不会被执行,直到您得到响应。 你可以从$ .post变成$ .ajax并使async属性为false。然后你就可以得到,然后你可以在ajax调用被响应后得到“回复”的值。
$.ajax({
type: 'POST',
url: url,
data: data,
success: success,
dataType: dataType,
async:false
});
答案 2 :(得分:0)
我想到了一个新的想法,请检查一下。
/**
* form submit
*/
$('#form1').on('submit', function() {
if (checkExistence()) {
return false;
}
});
/**
* check existence in db
* @returns {Boolean}
*/
function checkExistence() {
var txtItemCode = $('#txtItemCode').val();
var result = true;
$.post("http://localhost/test.php", {
txtItemCode: txtItemCode,
}, function(data, status) {
//alert("Data: " + data + "\nStatus: " + status);
if (data == 'OK') {
$('#status').html(data);
result = true;
} else {
$('#txtItemCode').val('').focus();
$('#status').html("Code is already existing, please provide another one:)")
result = false;
}
});
return result;
}
注意:您可以交换结果值并检查。