【问题标题】:How to handle return values in the function?如何处理函数中的返回值?
【发布时间】:2014-01-07 04:00:15
【问题描述】:

我有这个功能:

function kontrola(){    
    var jmeno = self.document.forms.newPassForm.user.value;
    $.get("checkMail.php?mail="+jmeno, function(data){ 
        if(data=='1'){
            alert('Tento uživatel v databázi neexistuje!');
            return false;
        }else return true;          
    }); 
}

我现在的问题是,没有显示警报(数据变量的值传递正常)。如果我添加返回 false;在函数结束时,会显示警报,但如果条件未满足,我无法从表单发送数据。你有什么解决办法吗?

【问题讨论】:

  • }否则返回true; ... 不正确 ... }else{ return true;}
  • 你是在表单中调用你的函数onsubmit吗?
  • 我检查了api.jquery.com/jQuery.get,该功能看起来是正确的,没有经过测试。可能只是else上的语法错误。
  • 虽然不一定是好风格,但我认为这实际上是有效的,请参阅jsfiddle.net/MN86d/11

标签: javascript jquery return


【解决方案1】:

return 在 jQuery 回调中的作用与在普通函数中不同。

jQuery 将 return true; 视为 continue (并假设您只想跳到 jQuery 对象集中的下一个对象)并将 return false; 视为 break (并假设您只想跳出当前的迭代)。 return false 在某些事件处理程序中使用时也会阻止默认事件行为,但不推荐这样做。

完成获取返回值的更好方法是使用注入get 调用的回调“拆分”调用函数。

function kontrola(callback){    
 var jmeno = self.document.forms.newPassForm.user.value;
 $.get("checkMail.php?mail="+jmeno, function(data){ 
    if(data=='1'){
        alert('Tento uživatel v databázi neexistuje!');
        callback(false);
    }else{ callback(true); }     
 });
}

function someCaller(){
 var someWork = 1 + 2;
 //split the rest of this call function to be done inside of the callback
 kontrola(function(result){
  var boolResult = result;
  if( boolResult ){
   //do more work
  }else{
   //handle false case
  }
 });
}

编辑

由于这是附加到提交按钮,我建议发送带有事件的提交元素

onsubmit = return "kontrola(this);"

因为如果成功了以后再提交的原因

function kontrola(submitElement){    
 var jmeno = self.document.forms.newPassForm.user.value;
 $.get("checkMail.php?mail="+jmeno, function(data){ 
  if(data=='1'){
    alert('Tento uživatel v databázi neexistuje!');
  }else{ submitElement.submit(); }     
 });
 return false;
}

【讨论】:

  • 我有点困惑....我在哪里调用 someCaller(); ?我对获取返回值不感兴趣 - 我没有在任何地方使用它......我只需要在警报窗口关闭后留在页面上,或者如果没有警报窗口并且表单提交则继续到下一页按钮已被点击。我只认为我可以通过“玩”返回来实现这一点......
  • @MichalSirůček - 我认为这是附加到提交事件吗?你能展示一下它是如何设置的,这样我就可以做一个更好的例子。
  • 对不起,应该在我的问题中写出来。在这里 - 我刚刚设置了 onSubmit: onSubmit="return kontrola();"。当我单击提交按钮时,将调用 kontrola() 函数,然后通过 ajax 我调用 checkMail.php,在其中检查电子邮件地址是否存在于 DB 中。如果存在,则会出现警报窗口。如果它没有“什么都没有”发生,表单数据将被传递给进一步处理。
  • @MichalSirůček - 见编辑。基本上,您将默认返回 false,然后如果 ajax 测试通过,您手动在元素上调用 submit 并提交表单。
  • 是的,有道理!但它仍然不起作用......我认为当我调用 sumbit - self.document.forms.newPassForm.newPassSubmit.submit(); , 那个函数 kontrola();再次调用它,它不会进入处理表单数据的步骤。
【解决方案2】:

如果您的 data 变量是一个整数,您将希望 data===1 不包含当前存在的单引号(与字符串比较,与数字比较时总是会失败)。

【讨论】:

  • 不不,数据变量是字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 2021-07-19
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多