Javascript 没有警报框,AJAX无法工作
我正在尝试使用以下代码:Javascript 没有警报框,AJAX无法工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试使用以下代码: $('#form1').on('submit', function(){ var txtItemCode = $('#txtItemCode').val(); $.post("userExist.php", { txtItemCode: txtItemCode, }, function(data,status){ //alert("Data: " + data + "\nStatus: " + status);
$('#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,但是当我删除警报时,它就不再工作了。这是为什么?我该如何使其工作?在您的代码中,ajax调用是异步工作的,因此无论您是否得到响应,都将执行下一行。在同步呼叫中,在得到响应之前,不会执行下一行。
您可以从$.post转换为$.ajax,并将async属性设置为false。然后,您将能够获得,然后在响应ajax调用之后,您可以获得“reply”的值
$.ajax({
type: 'POST',
url: url,
data: data,
success: success,
dataType: dataType,
async:false
});
在您的代码中,ajax调用是异步工作的,因此无论您是否得到响应,下一行都将被执行。在同步呼叫中,在得到响应之前,不会执行下一行。
您可以从$.post转换为$.ajax,并将async属性设置为false。然后,您将能够获得,然后在响应ajax调用之后,您可以获得“reply”的值
$.ajax({
type: 'POST',
url: url,
data: data,
success: success,
dataType: dataType,
async:false
});
引入警报时它工作的原因是它停止执行,并为异步调用提供足够的时间来完成
您没有得到正确的值,因为当post请求完成并执行回调时,您的javascript已经完成了执行
您在这里有几个选项:
声明一个全局变量并执行一个同步调用,您可以使用代码ABC POST来执行,也可以在POST调用之前调用$.ajaxSetup({async:false})
。将返回值分配给全局变量,并根据该值进行验证
使用jQuery的ajaxStop:$(document).ajaxStop(函数(){//在这里检查您的值,仍然需要声明一个全局})代码>
将该值作为属性写入DOM中的任意位置的隐藏div/中,并使用计时器定期检查该值,直到有值为止
引入警报时它工作的原因是它停止执行,并为异步调用提供足够的时间来完成
您没有得到正确的值,因为当post请求完成并执行回调时,您的javascript已经完成了执行
您在这里有几个选项:
声明一个全局变量并执行一个同步调用,您可以使用代码ABC POST来执行,也可以在POST调用之前调用$.ajaxSetup({async:false})
。将返回值分配给全局变量,并根据该值进行验证
使用jQuery的ajaxStop:$(document).ajaxStop(函数(){//在这里检查您的值,仍然需要声明一个全局})代码>
将该值作为属性写入DOM中的任意位置的隐藏div/中,并使用计时器定期检查该值,直到有值为止
我有了新的想法,请检查一下
/**
* 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;
}
注意:您可以交换结果的值并进行检查。我想到了一个新想法,请检查这个
/**
* 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;
}
注意:您可以交换result的值并进行检查。如果它是同步的,它会起作用,但这是一种糟糕的用户体验。另一种方法是您应该重新构建代码。使用Ajax的done功能我相信这是正确的答案,如果你认为这是一个糟糕的用户体验,你可以在发送之前使用告诉人们它仍在传输,然后删除它使用完成@5-T:No;同步AJAX队列阻塞UI线程。如果在发送之前在中添加一个元素,然后执行同步AJAX调用,然后将其删除,那么该元素将永远不会显示;您从未释放UI线程以允许它重新绘制页面。如果它是同步的,它会工作,但这是一种糟糕的用户体验。另一种方法是您应该重新构建代码。使用Ajax的done功能我相信这是正确的答案,如果你认为这是一个糟糕的用户体验,你可以在发送之前使用告诉人们它仍在传输,然后删除它使用完成@5-T:No;同步AJAX队列阻塞UI线程。如果在发送之前在中添加一个元素,然后执行同步AJAX调用,然后将其删除,那么该元素将永远不会显示;您从未发布过UI线程以允许它重新绘制页面。如果您向JSFIDLE发布一个完整的示例,这将非常好,我们确实需要更多的信息,但您应该现在就在线程中获得所有信息。请查看以下问题:,尤其是此答案:。你在这里得到的所有答案都不如我。如果你在JSFIDLE上发布了一个完整的示例,那就太好了,我们确实需要更多的信息,但是你现在应该在线程中有你所知道的所有信息。看看这个问题:,尤其是这个答案:。您在这里得到的所有答案都不如我。我认为JavaScript引擎会让AJAX事件处理程序在警报
进行时被调用,这很奇怪。是的,它正在使用您的选项一,在POST调用之前添加$.ajaxSetup({async:false})。感谢所有初学者的帮助。我想JavaScript引擎会让AJAX事件处理程序在警报
进行时被调用,这很奇怪。是的,它正在使用您的选项一,在POST调用之前添加$.ajaxSetup({async:false})。谢谢大家对初学者的帮助。这行不通。由于Ajax是异步的,checkExistence
将始终返回true
。是的,u是正确的。然后可以使用表单提交方法代替普通表单提交。这不起作用,你的结果还可以,但我需要提交带有数据的表单。结果为#状态,但表单未提交。两种情况下都可以使用ajax表单提交。使用jquery form submit()提交表单,而不是使用普通表单提交。这会帮你的,这行不通。由于Ajax是异步的,checkExistence
将始终返回true
。是的,u是正确的。然后可以使用表单提交方法代替普通表单提交。这不起作用,你的结果还可以,但我需要用d提交表单