2016-02-19 2 views
1

Я просто использую этот код, и я хотел, чтобы предупредить его ответ

$http.post('test.php',{id:index}); 

поэтому я использовал этот код

alert(($http.post('test.php',{id:index}).data)); 

Я не понимаю, как angularjs метод $http.post это отличается от кода ниже. и как данные поступают в код выше?

$http({ 
    url: "test.php", 
    method: "POST", 
    data: {id:index} 
}).success(function(data) { 
    alert(data); 
}).error(function(error) { 
}); 

test.php является

<?php 
    echo "TestName"; 
?> 
+0

Для вашей информации: методы 'success' и' error' устарели: «Утилиты $ http legacy обещают успех и ошибку, устарели. Вместо этого используйте стандартный метод. Если $ httpProvider.useLegacyPromiseExtensions установлено на false, эти методы будут вызывать ошибку $ http/legacy. " Таким образом, вместо использования '$ http(). Success(). Error();' use '$ http(). Then (function resolved() {}, function reject() {});' Смотрите: https: // docs.angularjs.org/api/ng/service/$http#deprecation-notice – iH8

ответ

3

Ваш код

  1. Предполагает, что функция post возвращает объект с data собственности на него.

  2. Предполагает, что post функция блокирует при выполнении POST (например, является синхронным).

Ни одно из этих допущений не является правильным. postзапускает POST, но возвращается немедленно, до завершения POST. Возвращаемое значение представляет собой обещание, которое является формализованным средством обработки обратных вызовов для асинхронных операций. Обещания имеют then, error и аналогичные функции на них.

В вашем втором примере, код запускается, а затем позже когда POST будет завершена, если он успешен success обратного вызова вызывается, передавая данные.

Это покрытие: here и (для обещаний) here.

+0

Спасибо, теперь я заметил –

Смежные вопросы