2016-03-19 3 views
0

Хорошо, у меня есть работа, но немного неясно, правильно ли я сделал это.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 вызов асинхронным? это связано с обратным вызовом? Должен ли я обращаться с ним по-другому?

+1

Анонимная функция в аргументах '.post()' _is_ callback. – Teemu

+0

Итак, функция doSomething() уже действует как обратный вызов. –

+1

сэр, ваш код верный, поздравляю – NaN

ответ

2

бы это Ajax вызов асинхронным

Да; $.post() - это сокращение от JQuery's $.ajax() method, которое по умолчанию является асинхронным.

это предусматривает обратный вызов

Конечно, ваши функции в конце этого заявления является функцию обратного вызова.

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

Вы можете прочитать больше о API, и как эти функции работают, каковы их значения по умолчанию, и какие параметры они принимают:

+0

Хорошо, у меня есть другой вопрос. Я думаю, что моя проблема в том, что в предыдущей функции у меня было несколько почтовых запросов, и поэтому данные не назначались для использования в следующих почтовых запросах. Как браузер обрабатывает несколько запросов на ввод в функции?Выполняет ли вызов, а затем продолжает выполнять следующий код? –

+0

@TomAlbanese Возможно, попробуйте сделать это в отдельный вопрос, чтобы люди могли более полно понять вашу проблему. –

0

Я думаю, используя методы .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). Когда будет выполнена отсрочка, будут вызваны функции обратного вызова.

+0

@NaN Я не знаю. Кому ты рассказываешь. Я считаю, что это намного чище. Если сервер не может обработать запрос, он не работает. Просто. Определение того, если запрос не выполнен на основе данных, которые он возвращает, просто усложняет то, что должно быть простым. –