没有警报框的AJAX无法正常工作
我正在尝试使用此代码:
$('#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
,它不再有效。 为什么这样,我怎样才能使它工作?
引入警报时它起作用的原因是因为它停止执行并为异步调用提供足够的时间来完成。
您没有获得正确的值,因为在完成发布请求并执行回调时,您的javascript已经完成执行。
你有几个选择:
- 声明一个全局变量并执行同步调用,您可以使用发布的代码ABC执行此操作,也可以在POST调用之前调用
$.ajaxSetup({ async: false })
。 将返回值分配给全局变量并对其进行validation。 - 使用jQuery的ajaxStop:
$(document).ajaxStop(function() { //check your values here, still need to declare a global });
- 将值写入隐藏的div /作为DOM中任何位置的属性,并有一个定时器,定期检查它直到有值。
在你的代码中,ajax调用是异步的,因此无论你是否得到响应,你的下一行都将被执行。 在同步调用中,您的下一行将不会被执行,直到您得到响应。 你可以从$ .post变成$ .ajax并使async属性为false。 然后你就可以得到,然后你可以在响应ajax调用后得到“回复”的值。
$.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType, async:false });
我想到了一个新的想法,请检查一下。
/** * 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; }
注意:您可以交换结果值并检查。