获取 Ajax 函数以返回 true 或 false
Get Ajax function to return true or false
>我正在尝试让Ajax函数返回true或false(这是一种从另一个函数调用的验证函数)。因此,另一个函数需要从这个函数中获取一个真值或假值,以便它知道下一步该做什么。
我确定我以前做过这个,但现在我无法让它工作。我尝试了同步和异步调用,在 onreadystatechange 函数内部和它下面都有返回,什么都没有。
这是Ajax:
function saveBooking(){
var service_ids=document.getElementById("allservice_ids").value;
var provider_ids=document.getElementById("allprovider_ids").value;
var chosen_time=document.getElementById("chosen_time").value;
var chosen_date=document.getElementById("chosen_date").value;
var message=document.getElementById("message").value;
var parameters="service_ids="+service_ids+"&provider_ids="+provider_ids+"&time="+chosen_time+"&date="+chosen_date+"&you=<?php echo $_SESSION['user_mail']; ?>&message="+message
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST","include/save_booking.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xmlhttp.onreadystatechange = function() {//Call a function when the state changes.
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var yesorno=xmlhttp.responseText;
if(yesorno=="ok"){
return true;
}
else{
document.getElementById("booking_error").innerHTML = xmlhttp.responseText;
return false;
}
}
}
xmlhttp.send(parameters);
}
现在save_booking.php只包含行<?php echo "ok"; ?>
,我将其简化为用于测试目的。
有人可以告诉我如何让它工作吗?在另一个函数中,如果我这样做:
if(saveBooking()){
alert(saveBooking());
}
它只是提醒"未定义"一词。
请注意,我对jQuery不太熟悉,所以"使用jQuery"对我来说不是一个有用的回应。
您当前的 return
语句仅确定 onreadystatchange
方法返回的内容,而未处理的内容(如果我错了,请纠正我 - 至少我不知道如何访问其返回值)。你想要的是影响saveBooking
的回报,所以你可以做这样的事情:
var responseOk = false;
xmlhttp.onreadystatechange = function() {//Call a function when the state changes.
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
responseOk = (xmlhttp.responseText=="ok");
if(!responseOk) {
document.getElementById("booking_error").innerHTML = xmlhttp.responseText;
}
}
}
...
return responseOk;
顺便说一句,除非有一些特殊的原因想要避免jQuery(例如,我个人喜欢先学会自己做事),否则我强烈建议你看看它。这对你来说不会很复杂,会让事情变得容易得多。
除此之外,我必须支持MilkyWayJoe的评论 - 生成异步HTTP请求然后需要等待其返回值没有多大意义。目前,我上面的示例在大多数情况下可能会返回false
,因为脚本到达 return 语句时请求尚未完成。不要混淆发出请求的函数和请求的回调是有意义的。
相关文章:
- JavaScript-切换“;全部检查”;复选框true/false
- true==false以某种方式计算为true
- Javascript似乎在说true ==false
- JavaScript onkeydown, return true,false
- 从异步函数返回true/false以用于同步if()
- 函数返回undefined而不是true/false
- 为什么true/true是1,true/false是无穷大,false/true是0,false/false是NaN
- 检查对象数组是否包含布尔值true/false
- 函数:根据字符串中是否存在子字符串返回 True/False
- 如何将 ng-show 与控制器中返回 true/false 的函数一起使用
- 在input.checked=true/false _without_ jQuery上触发一个事件
- jQuery javascript未正确返回true/false
- 如何从嵌套的jquery回调函数中返回true/false
- 如何在骨干模型属性中设置布尔值true/false
- 如何使用angular或javascript在基于true/false返回的html中显示值
- 基于true/false变量显示/隐藏进度条
- Node.js在返回true/false时停止函数
- 是否可以将true/false值传递给ajax函数
- 根据Webix中的复选框值编辑true/false
- Meteor:设置车把变量true/false