2013-07-05 31 views
1

工作我想使用此代码: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,它不再起作用。这是为什么,我该如何使它工作?

+0

如果你发布一个完整的例子给jsfiddle,那会很棒,我们确实需要多一点信息,但是你应该在线程中获得所有新闻信息 – Mataniko

+0

看看这个问题:http:// stackoverflow.com/q/16090545/218196,特别是这个答案:http://stackoverflow.com/a/16090709/218196。你在这里得到的所有答案都是劣等的IMO。 –

回答

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. 值/ DOM中的任意位置写入一个隐藏的div作为属性,并有一个计时器,定期检查,直到有一个值。
+0

我觉得很好奇,JavaScript引擎会在进行“alert”时调用AJAX事件处理程序。 – icktoofay

+0

是的,它使用您的选项之一,在POST调用之前添加$ .ajaxSetup({async:false})。感谢所有帮助初学者。 – sam

3

在你的代码中,ajax调用是异步的,所以不管你是否响应,你的下一行都会被执行。在同步调用你的下一行将不会被执行,直到你得到回应。 您可以从$ .post变为$ .ajax,并使async属性为false。然后你就可以得到,然后你可以在ajax调用响应后得到“回复”的值。

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType, 
    async:false 
}); 
+0

http://stackoverflow.com/questions/5528852/ajax-sync-and-async-difference –

+1

它会工作,如果它是同步的,但它是一个糟糕的用户体验。 – icktoofay

+0

另一种方法是你应该重建你的代码。并使用完成的功能ajax –

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

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

+1

这不行。由于Ajax是异步的,'checkExistence'将始终返回'true'。 –

+0

是的,你是很好的。然后可以使用http://malsup.com/jquery/form/表单提交方法,而不是正式表单提交。 –

+0

这不行,你的结果没问题,但我需要提交表单数据。结果来到#status,但表单没有提交。 – sam