使用Ajax传递参数(使用延迟和保证)需要帮助

时间:2017-02-25 09:34:26

标签: javascript php jquery ajax

这很可能是一个重复的问题,因为这对学习者来说是一个常见的问题,但我不能找到一个针对这个问题的最佳工作解决方案(我一直试图在这个问题上取得多年的成绩!):

这是有效的,因为没有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);
}
?>

1 个答案:

答案 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");
    }
  });
}