var display_message="";
$('input:checked').each(function(index) {
var profile_id=$(this).val();
$.ajax({
type: 'post',
url: 'myUrl',
data: data,
success: function(data) {
if(data=="ok")
display_message = display_message + data +", ";
}
});
});
alert(display_message);
alert(display_message);
if($.trim(display_message)!=""){
jAlert("Your birthdate already exits in "+display_message.substring(0, display_message.length - 2)+".", "Bdate");
return false;
}
在这段代码中,我使用两个alert-box来显示display_message变量值。 当我成功运行此代码时,在第一个警报框中我得到空白值和第二个警报框我得到我需要的值,然后它将进入条件。 如果我没有使用警告框,则它将始终在display_message变量中取空值,并且永远不会进入if条件。所以我需要更改以运行此代码没有警报框?
答案 0 :(得分:1)
您正在通过AJAX进行异步调用,但您的代码正在同步执行。所以它在AJAX调用完成之前返回。第一个警报框只是给出了赶上的功能时间。您需要在成功回调中处理所有这些代码。
var display_message="";
$('input:checked').each(function(index) {
var profile_id=$(this).val();
$.ajax({
type: 'post',
url: 'myUrl',
data: data,
success: function(data) {
if(data=="ok")
display_message = display_message + data +", ";
if($.trim(display_message)!=""){
jAlert("Your birthdate already exits in "+display_message.substring(0, display_message.length - 2)+".", "Bdate");
return false;
}
});
});
答案 1 :(得分:1)
您希望所有ajax查询完成并返回结果,对吗?
然后这是一个同步问题。
我建议采用这种方法(为了清晰起见,代码已经过简化)。
var inputs_processed = -1;
var inputs_to_process = -1;
function queryData() {
inputs_to_process = $('input:checked').length;
$('input:checked').each(function() {
$.ajax({success: function(data) {
inputs_processed += 1;
// build up that message
}});
});
}
function displayResult() {
if (inputs_processed == inputs_to_process) {
// display result
} else {
// not all queries finished yet. Wait.
setTimeout(displayResult, 500);
}
}
queryData();
displayResult();
基本上,您知道应该发出多少请求,并且在请求数量返回之前您不会显示结果。
答案 2 :(得分:0)
为什么您的数据是“数据”?我不能在这里声明任何称为数据的变量。您应该将要用作参数的值传入数据选项。
编辑:这就是你得到空值的原因。数据没有初始化为任何东西。只有在成功函数之后,您的“数据”将具有该值,因为您声明了具有相同名称的返回值