AJAX在没有警告框的情况下无法工作

AJAX not working without alert box

本文关键字:情况下 工作 警告 AJAX      更新时间:2023-09-26

我正在尝试使用以下代码:

$('#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时,它就不再工作了。为什么会这样,我该如何让它发挥作用?

引入警报时它之所以有效,是因为它停止了执行,并为异步调用提供了足够的时间来完成。

您没有得到正确的值,因为当post请求完成并执行回调时,您的javascript已经完成执行。

这里有几个选项:

  1. 声明一个全局变量并执行同步调用,您可以使用发布的代码ABC执行,也可以在POST调用之前调用$.ajaxSetup({ async: false })。将返回值分配给全局变量,并根据该值进行验证
  2. 使用jQuery的ajaxStop:$(document).ajaxStop(function() { //check your values here, still need to declare a global });
  3. 将值作为属性写入DOM中的任何位置的隐藏div/,并有一个计时器定期检查它,直到有值为止

在您的代码中,ajax调用是异步工作的,因此无论您是否得到响应,您的下一行都将被执行。在得到回应之前,同步呼叫不会执行您的下一行。您可以从$.post转换为$.ajax,并使async属性为false。然后,您将能够得到,然后在ajax调用得到响应后,您可以得到"reply"的值。

$.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;
}

注意:您可以交换结果和检查的值。