我需要在发送表单之前验证用户和密码。为此,我使用jQuery和Ajax。但是我在将'estado'
值传递到匿名函数之外时遇到了问题。
这是代码:
function tx_oriconvocatorias_pi1_validarFormPost(){
var x=document.forms["form_postulante"]["pass_un"];
if (x.value==null || x.value==""){
alert("Por favor ingrese su contraseña.");
return false;
}
var $j = jQuery.noConflict();
var cun = $j('#correo_un').val();
var pun = $j('#pass_un').val();
var estado = null;
$j.ajax({
type: 'POST',
data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
success: function(datos){
if(datos!=1){
alert ("La contraseña ingresada no es válida");
}
estado = datos;
alert(estado);
},
});
alert(estado);
if (estado!=1){
return false;
}
}
我注意到第一个alert(estado)
(外部)返回null,然后第二个alert(estado)
(内部)返回'datos'
,因此代码中的最后一个alert(estado)
被执行首先,我的函数总是返回false
。
我不知道如何在执行Ajax代码之后评估'estado'
,而不是之前。
提前感谢您的帮助。
答案 0 :(得分:1)
你做不到。您正在执行异步请求,因此您的函数在返回ajax调用的结果之前结束。 您可以强制呼叫为同步:
$j.ajax({
type: 'POST',
data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
async: false,//here you are synchrone
success: function(datos){
或者您可以返回false,并手动提交表单。
答案 1 :(得分:1)
第一个alert(estado)
为空且第二个alert(estado)
为'datos'的原因是因为ajax是异步的。这意味着即使您正在调用$ j.ajax,代码仍然会通过并评估函数的其余部分。
我认为这可能是您正在寻找的更多内容:
function tx_oriconvocatorias_pi1_validarFormPost(){
var x=document.forms["form_postulante"]["pass_un"];
if (x.value==null || x.value==""){
alert("Por favor ingrese su contraseña.");
return false;
}
var $j = jQuery.noConflict();
var cun = $j('#correo_un').val();
var pun = $j('#pass_un').val();
var estado = null;
$j.ajax({
type: 'POST',
data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
success: function(datos){
if(datos!=1){
alert ("La contraseña ingresada no es válida");
}
estado = datos;
alert(estado);
},
error: function(datos) {
return false;
}
});
}
答案 2 :(得分:1)
您必须使用同步调用才能实现此目的。但是对于同步的ajax调用,浏览器不会响应,直到响应出现时请记住这一点。