从下面的编码中,如果某些数据有误,则会提示错误。如果确认的密码与密码不同,它可以正常工作。但是,如果登录ID检查似乎有一些问题。它分别提醒true789 false false123 false456。为什么结果不是假123假false456 false789假?因为json的延迟?怎么解决呢?
var result = "true";
$('#test').click(function(){
validation();
alert(result);
});
function validation(){
result = "true";
var loginID = $("#loginID").val();
var role = $("#role").text();
// check Login Name
if (loginID == "" || loginID == null){
$('#errorID').empty();
$('#errorID').append(
'<h6>' + "The Login Name cannot be empty" + '</h6>'
);
$("#errorID").show();
result="false";
} else {
$.ajax({
type: "GET",
dataType: "jsonp",
jsonpCallback: "jsoncallback",
data: {
ID: loginID,
role: role
},
url: "http://mydomain.com/checkID.php?jsoncallback=?",
success: function(data){
if (data[0].data.user_name!=""){
result="false";
alert(result+"123");
$('#errorID').empty();
$('#errorID').append(
'<h6>' + "The Login Name " + data[0].data.user_name +
" is used." + '</h6>'
);
$("#errorID").show();
alert(result+"456");
}
},
error: function(jqXHR, textStatus, errorThrown){
alert("Request failed: " + textStatus + errorThrown);
result="false";
}
}); //end of ajax
}
alert(result+"789");
return result;
} // end of #validation
答案 0 :(得分:1)
ajax调用是异步完成的。它进入ajax()函数然后继续,当结果最终到来时,警报或事件处理程序中的任何内容将触发。
您可以在ajax调用中添加async : false
,这将改变运行方式。 789警报仅在ajax调用完成并响应后才会运行。
此外,如果您的域名进行了ajax调用,那么您不需要jsonpCallback,如果响应的标头是application/json
,那么您也应该删除dataType并将其保留给jQuery以正确处理它