没有警报框,AJAX无法正常工作

时间:2013-07-05 03:55:44

标签: javascript jquery 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时,它就不再有效了。为什么会这样,我怎样才能使它发挥作用?

3 个答案:

答案 0 :(得分:4)

引入警报时它起作用的原因是它停止执行并为异步调用提供足够的时间来完成。

您没有获得正确的值,因为在完成发布请求并执行回调时,您的javascript已经完成执行。

你有几个选择:

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

答案 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;
}

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