非同色回调


Asychromous callback

好的,我已经让它工作了,但有点不清楚我是否正确完成了它。

我有代码:

function post(){
    var info = "hello";
    $.post("test.php", {"info":info}, function(data){
        if(data !== "success"){
            alert("Test failed");
        }
        else{
            doSomething();
        }
    });
}

PHP 看起来像这样:

<?php
$info = $_POST['info'];
$data = failed;
if(isset($_POST['info'])){
    $data = "success";
}
echo $data;
?>

它目前有效,但是这个 ajax 调用会是异步的吗? 它是否涉及回调?我应该以另一种方式处理它吗?

这个 ajax 调用是异步的吗

是的; $.post()是 JQuery $.ajax() 方法的简写,默认情况下它是异步的。

是否涉及回调

当然,此语句末尾的函数回调函数。

$.post("test.php", {"info":info}, function(data){
//                                ^^^^^^^^^^^^^^
    if(data !== "success"){
        alert("Test failed");
    }
    else{
        doSomething();
    }
});

您可以阅读有关 API 以及这些函数如何工作、它们的默认值以及它们接受的参数类型的更多信息:

  • JQuery 发布方法
  • JQuery ajax 方法
我认为

使用.done().fail()方法会更容易遵循。

function post() {
    return $.post("test.php", {info:"hello"}).done(function () {
        doSomething();
    }).fail(function () {
        alert("Test failed");
    });
}

然后在 PHP 代码中,您必须指示请求何时失败:

if ( ! isset($_POST['info'])) {
    header($_SERVER["SERVER_PROTOCOL"] . ' 400 Bad Request');
    die;
}
// Do what you need to do...

当您调用$.post(或$.get$.ajax)时,您会得到一个递延值。递延值是将来会完成(或失败)的事情。

为了找出延迟值何时完成,您可以使用 .done(fn).fail(fn) 向延迟值添加回调处理程序。延迟值完成后,将调用回调函数。