【问题标题】:ColdFusion ajax validationColdFusion ajax 验证
【发布时间】:2014-03-17 22:37:16
【问题描述】:

在 cf9 中,我有一个页面,我想检查 db 中是否存在字段值(通过 ajax)。如果它不存在,我想停止处理(返回 false)。一切正常,除了我不知道如何将 ajax 调用的结果传回主函数 请帮忙

<cfajaximport tags="cfmessagebox, cfwindow, cfajaxproxy">
<cfajaxproxy cfc="reqfunc" jsclassname="jsobj" />

<script language="JavaScript"> 

function checkRequired() {
    var testVal = document.getElementById('myField').value;
    return testAjax(testVal);
    /* more processing that should stop if ajaxCallBack returns false */
}
function testAjax(testVal) {
    var instance = new jsobj();
    instance.setCallbackHandler(ajaxCallBack);
    instance.checkProfile(testVal);
}

function ajaxCallBack(returns) { 
    alert(returns); 
// returns correctly "true" if value checks against db, "false" if it doesn't
// HOW DO I PASS THIS VALUE BACK TO checkRequired ???
}
</script>

<form>
<input type="text" name="myField" id="myField" value=""><p>
<input type="button" value="Check with Ajax" onClick="return checkRequired()">
</form>

非常感谢

【问题讨论】:

    标签: ajax coldfusion coldfusion-9


    【解决方案1】:

    除非您将主函数构建为“等待”返回,否则您不能将结果返回给该函数的实例;它已经退出了,可以这么说。使用 cfajax 可能会调整主函数以调用和等待,但简单的解决方案是让回调随后调用您的主函数并将结果/返回的存在视为是否处理或调用的标志ajax。

    function checkRequired(return) {
      if(return != null) {
        /* more processing */
      } else {
        testAjax(testVal);
      }
    }
    
    function ajaxCB(return) {
      checkRequired(return);
    }
    

    我可能会再重构一点,但你应该明白了。

    【讨论】:

    • 我已经将 3 个函数合并为一个,但还是一样,内部 func 没有将“return false”传递给主函数,表单仍然会“提交”不管“返回”函数的值如何~~~~ function checkRequired() { var testVal = document.getElementById('myField').value; var instance = new jsobj(); var r = instance.setCallbackHandler( function(returns) { if(returns == 0) {return false;} } ); instance.checkProfile(testVal); document.getElementById('testForm').submit(); }
    • 感谢威廉,你的也可以,而且它使任何新的变量都可用于该函数。还是要把它放在函数的最顶端 ~~~~~ function checkRequired(r) { if (typeof r != 'undefined') { if (r == 1){ document.getElementById('testForm') 。提交(); } else {alert("出错了"); return false;} } else { var testVal = document.getElementById('myField').value; testAjax(testVal); } } 函数 testAjax(testVal) { var instance = new jsobj(); instance.setCallbackHandler(ajaxCallBack); instance.checkProfile(testVal); } 函数 ajaxCallBack(returns) { checkRequired(returns); }
    【解决方案2】:

    这真的是一种 hack,不是我想要的,而是它的价值:如果我把这节放在我的函数的最后,callBack 在主函数中折叠,它会起作用

    function checkRequired() {
      var testVal = document.getElementById('myField').value;
      var instance = new jsobj();
      var r = instance.setCallbackHandler(
        function(returns) {
          if(returns == 1)  {
            document.getElementById('testForm').submit();
          } else { alert("Something wrong"); }
        }
      );
      instance.checkProfile(testVal);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2013-07-07
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多