function checkname(o) {
var o = $('#log').val();
$.ajax({
url: 'check_name',
type: 'POST',
data: 'username=' + o,
success: function(o){
if(o == 1) {
return o;
}
else {
o.addClass( "ui-state-error" );
updateTips( "not available" );
return false;
}
}
});
}
此功能与要检查的模型中的表单相关或不可用
$( "#dialog-form" ).dialog({
autoOpen: false,
height: 600,
width: 550,
modal: true,
buttons: {
"save": function() {
var bValid = true;
allFields.removeClass( "ui-state-error" );
bValid = bValid && checkname ( name, "name");
if ( bValid ) {
$.ajax({
type: 'POST',
url: 'add_user',
data: $('#myform :input').serialize(),
success: function(i) {
alert('sucess');
window.setTimeout(function(){location.reload()},500)
}
});
$( this ).dialog( "close" );
}
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
close: function() {
allFields.val( "" ).removeClass( "ui-state-error" );
}
});
当我点击保存表单时不会保存或只会在firebug return 1
中关闭如果名称可用,请保存
答案 0 :(得分:1)
由于AJAX调用是异步的,因此无法从成功回调中返回checkname
函数中的某些内容。
使用回调方法处理结果:
function checkname(o, whenValid) {
var o = $('#log').val();
$.ajax({
url: 'check_name',
type: 'POST',
data: 'username=' + o,
success: function (o) {
if (o == 1) {
whenValid();
} else {
o.addClass("ui-state-error");
updateTips("not available");
}
}
});
}
$("#dialog-form").dialog({
autoOpen: false,
height: 600,
width: 550,
modal: true,
buttons: {
"save": function () {
allFields.removeClass("ui-state-error");
checkname(name, function(){
$.ajax({
type: 'POST',
url: 'add_user',
data: $('#myform :input').serialize(),
success: function (i) {
alert('sucess');
window.setTimeout(function () {
location.reload()
}, 500)
}
});
$(this).dialog("close");
});
},
Cancel: function () {
$(this).dialog("close");
}
},
close: function () {
allFields.val("").removeClass("ui-state-error");
}
});
答案 1 :(得分:0)
在第一个ajax函数中,您从success函数的范围内返回,但checkname函数不返回任何内容。即使它确实如此,ajax也是异步的,因此返回返回数据的值将不起作用。
你必须等待ajax调用完成才能开始使用数据,你可以通过使用ajax函数的延迟返回来实现,如下所示:
function checkname(name) {
return $.ajax({
url: 'check_name',
type: 'POST',
data: {username : name}
});
}
你可以使用:
$("#dialog-form").dialog({
autoOpen: false,
height: 600,
width: 550,
modal: true,
buttons: {
save: function () {
allFields.removeClass("ui-state-error");
//whatever "name" is ?
checkname($('#log').val()).done(function(data) {
if (data==1) {
$.ajax({
type: 'POST',
url: 'add_user',
data: $('#myform :input').serialize()
}).done(function(data2) {
//why use ajax only to reload the page ?
alert('sucess');
window.setTimeout(function () {
location.reload();
}, 500);
});
$(this).dialog("close");
}
});
},
Cancel: function () {
$(this).dialog("close");
}
},
close: function () {
allFields.val("").removeClass("ui-state-error");
}
});
此外,您似乎在各处使用相同的变量。 checkname函数的参数是o
,在函数内部有一个名为o
的新变量,然后在ajax函数中使用o
,你应该尝试成为一个更有创造力?