ColdFusion ajax验证
在cf9中,我有一个页面,我想检查db中是否存在字段值(通过ajax)。如果它不存在,我想停止处理(返回false)。一切都很好,只是我不知道如何将ajax调用的结果传递回主函数 请帮忙ColdFusion ajax验证,ajax,coldfusion,coldfusion-9,Ajax,Coldfusion,Coldfusion 9,在cf9中,我有一个页面,我想检查db中是否存在字段值(通过ajax)。如果它不存在,我想停止处理(返回false)。一切都很好,只是我不知道如何将ajax调用的结果传递回主函数 请帮忙 <cfajaximport tags="cfmessagebox, cfwindow, cfajaxproxy"> <cfajaxproxy cfc="reqfunc" jsclassname="jsobj" /> <script language="JavaScript">
<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>
函数checkRequired(){
var testVal=document.getElementById('myField')。值;
返回testAjax(testVal);
/*如果ajaxCallBack返回false,则应停止的更多处理*/
}
函数testAjax(testVal){
var instance=newjsobj();
setCallbackHandler(ajaxCallBack);
checkProfile(testVal);
}
函数ajaxCallBack(返回){
警报(返回);
//如果值检查db,则正确返回“true”,否则返回“false”
//如何将此值传递回checkRequired???
}
非常感谢除非您将主函数构建为“等待”返回,否则无法将结果返回到该函数的实例;可以说,它已经退出了。使用cfajax可能会调整main函数以调用并等待,但简单的解决方案是让回调函数随后调用主函数,并将结果/返回的存在视为是否处理或调用ajax的标志
function checkRequired(return) {
if(return != null) {
/* more processing */
} else {
testAjax(testVal);
}
}
function ajaxCB(return) {
checkRequired(return);
}
我可能会进行更多的重构,但你应该明白这一点。这确实是一种黑客行为,不是我想要的,而是为了它的价值:如果我把这一节放在函数的最后,回调在主函数中崩溃,它就会工作
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);
}
我已经将这3个函数折叠为一个函数,但仍然是一样的,内部函数不会将“return false”传递给主函数,不管“returns”函数的值是多少,表单仍然会“submit”~~~~~函数checkRequired(){var testVal=document.getElementById('myField')。value;var instance=new jsobj();var r=instance.setCallbackHandler(函数(返回){if(返回==0){return false;}}});instance.checkProfile(testVal);document.getElementById('testForm')。submit();}谢谢william,你的函数也能工作,而且它使函数可以使用任何新的变量。仍然必须将它放在函数的最顶端~~~~~函数checkRequired(r){if(typeof r!=“undefined”){if(r==1){document.getElementById('testForm').submit();}else{alert(“Something short”);return false;}else{var testVal=document.getElementById('myField').value;testjax(testVal);}函数testjax(testVal){var instance=new jsobj();instance.setCallbackHandler(ajaxCallBack);instance.checkProfile(testVal);}函数ajaxCallBack(返回){checkRequired(返回);}