这很可能是一个重复的问题,因为这对学习者来说是一个常见的问题,但我不能找到一个针对这个问题的最佳工作解决方案(我一直试图在这个问题上取得多年的成绩!):
这是有效的,因为没有Ajax:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
function first(){
var bbb;
var test = prompt("enter a number");
if(test == 6){
bbb = true;
return bbb;
} else {
bbb = false;
}
}
function second(){
if(first()){
alert("returned true!!");
} else {
alert("returned false");
}
}
但我不能让下一段代码工作,因为回调在Ajax调用完成之前运行。我知道延迟和承诺是对这类回调进行排序的现代方法,但在阅读并观察TONS之后,我仍然缺少一些关键的逻辑或语法,它对我不起作用。
有人可以通过以下代码帮助我获取延迟操作的实例吗?然后从那里我将能够提高我对延期的学习,但目前我无处可去。
//-----------------------gets much more confusing with Ajax calls------------------
function firstAjax(){
var check = prompt("number between 1 and 10 to send (6 should return true from PHP...)");
$.post('remote.php',
{
check: check
},function(data) {
var returned = JSON.parse(data);
if(returned == true) {
alert(returned);
return true;
} else {
alert(returned);
return false;
}
});
}
function secondAjax(){
if(firstAjax()){
alert("successfull return");
} else {
alert("return failed"); //callback runs before the post returns...
}
}
激活功能的按钮:
<button type="button" onClick="second()">Run Local Javascript only </button>
<button type="button" onClick="secondAjax()">Run Ajax call with param passing</button>
这是'remote.php':如果input = 6则返回true。
<?php
$check = $_POST['check'];
if($check == 6){
echo json_encode(true);
} else {
echo json_encode(false);
}
?>
答案 0 :(得分:2)
您正在执行异步请求,firstAjax()
将在收到回复之前返回undefined
。
您需要在firstAjax()
中将回调函数定义为参数,然后在收到响应时调用此函数。
function firstAjax(callback) {
var check = prompt("number between 1 and 10 to send (6 should return true from PHP...)");
$.post('remote',
{check: check},
function (data) {
var returned = JSON.parse(data);
if (returned == true) {
alert(returned);
callback(true);
} else{
alert(returned);
callback(false);
}
});
}
function secondAjax() {
firstAjax(function(result){
if(result){
alert("successfull return");
}else{
alert("return failed");
}
});
}