Учебники

16) AngularJS http, Ajax

AJAX — это краткая форма асинхронного JavaScript и XML. AJAX был в первую очередь предназначен для обновления частей веб-страницы, без перезагрузки всей страницы.

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

AJAX позволяет асинхронно обновлять веб-страницы, обмениваясь небольшими объемами данных с сервером за кулисами. Это означало, что было возможно обновить части веб-страницы без перезагрузки всей страницы.

Многие современные веб-приложения используют эту технику для обновления страницы или получения данных с сервера.

В этом уроке вы узнаете

Взаимодействие на высоком уровне с серверами с использованием $ ресурса

Angular предоставляет два разных API для обработки запросов Ajax. Они есть

  • $ ресурсов
  • $ HTTP

Мы рассмотрим свойство «$ resource» в Angular, которое используется для взаимодействия с серверами на высоком уровне.

Когда мы говорим о взаимодействии на более высоком уровне, это означает, что мы будем беспокоиться только о том, что сервер может предложить в отношении функциональности, а не о том, что конкретно сервер делает в отношении этой функциональности.

Например, если на сервере размещалось приложение, в котором хранится информация о сотруднике определенной компании, сервер может предоставлять клиентам такие функции, как GetEmployeeDetails, SetEmployeeDetails и т. Д.

Итак, на высоком уровне мы знаем, что могут делать эти две функции, и мы можем вызывать их, используя свойство $ resource. Но тогда мы не знаем точно детали «GetEmployeeDetails» и «SetEmployeeDetails функции», и как это реализовано.

Приведенное выше объяснение объясняет то, что известно как архитектура на основе REST.

  • REST известен как Репрезентативная передача состояния, которая представляет собой архитектуру, которой придерживаются многие современные веб-системы.
  • Это означает, что вы можете использовать обычные HTTP-глаголы GET, POST, PUT и DELETE для работы с веб-приложением.

Итак, предположим, у нас есть веб-приложение, которое поддерживает список событий.

Если бы мы хотели попасть в список всех событий,

  • Веб-приложение может предоставлять URL-адрес, такой как http: // example / events и
  • Мы можем использовать глагол «GET», чтобы получить полный список событий, если приложение следует архитектуре на основе REST.

Например, если было событие с идентификатором 1, мы можем получить подробности об этом событии через URL. Http: // Пример / События / 1

Что такое объект $ resource

Объект $ resource в Angular помогает в работе с серверами, которые обслуживают приложения на основе архитектуры REST.

Основной синтаксис оператора @resource вместе с различными функциями приведен ниже

Синтаксис оператора @resource

var resource Object = $resource(url);  

Когда у вас есть ресурсный объект, вы можете использовать следующие функции для выполнения необходимых вызовов REST.

1. get ([params], [success], [error]) — это можно использовать для выполнения стандартного вызова GET.

2. save ([params], postData, [success], [error]) — это можно использовать для выполнения стандартного вызова POST.

3. query ([params], [success], [error]) — это можно использовать для выполнения стандартного вызова GET, но массив возвращается как часть ответа.

4. remove ([params], postData, [success], [error]) — это можно использовать для выполнения стандартного вызова DELETE.

Во всех функциях, приведенных ниже, параметр ‘params’ может использоваться для предоставления необходимых параметров, которые необходимо передать в URL.

Например,

  • Предположим, что вы передаете значение Topic: ‘Angular’ в качестве ‘param’ в функции get как
  • get (‘ http: // example / events ‘, ‘{Topic:’ Angular ‘}’)
  • URL http: // example / events? Topic = Angular вызывается как часть функции get.

Как использовать свойство $ resource

Чтобы использовать свойство $ resource, необходимо выполнить следующие шаги:

Шаг 1) Файл «angular-resource.js» необходимо загрузить с сайта Angular.JS и разместить в приложении.

Шаг 2) Модуль приложения должен объявить зависимость от модуля «ngResource», чтобы использовать $ resource.

В следующем примере мы вызываем модуль «ngResource» из нашего приложения «DemoApp».

angular.module(DemoApp,['ngResource']); //DemoApp is our main module

Шаг 3) Вызов функции $ resource () с конечной точкой REST, как показано в следующем примере.

Если вы сделаете это, то объект $ resource будет иметь возможность вызывать необходимую функциональность, предоставляемую конечными точками REST.

В следующем примере вызывается URL-адрес конечной точки: http: // example / events / 1

angular.module('DemoApp.services').factory('Entry', function($resource) 
{
     return $resource('/example/Event/:1); // Note the full endpoint address
});

В приведенном выше примере выполняются следующие действия

  1. При определении приложения Angular служба создается с помощью оператора DemoApp.services, где DemoApp — это имя, данное нашему приложению Angular.

  2. Метод .factory используется для создания деталей этого нового сервиса.

  3. «Вступление» — это имя, которое мы даем нашему сервису. Это может быть любое имя, которое вы хотите указать.

  4. В этом сервисе мы создаем функцию, которая будет вызывать API $ resource

  5. $ Ресурса ( ‘/ пример / Событие /: 1).

    The $resource function is a service which is used to call a REST endpoint. The REST endpoint is normally a URL. In the above function, we are using the URL (/example /Event/:1) as our REST endpoint. Our REST endpoint(/example /Event/:1) denotes that there is an Event application sitting on our main site «example». This Event application is developed by using a REST-based architecture.

  6. The result of the function call is a resource class object. The resource object will now have the functions ( get() , query() , save() , remove(), delete() ) which can be invoked.

Step 4) We can now use the methods which were returned in the above step( which are the get() , query() , save() , remove(), delete() ) in our controller.

In the below code snippet, we are using the get() function as an example

Let’s look at the code which can make use of the get() function.

angular.module('DemoApp.controllers',[]);
angular.module('DemoApp.controllers').controller('DemoController',function($scope, MyFunction) {
  var obj = MyFunction.get({ 1: $scope.id }, function() {
    console.log(obj);
  }); 

In the above step,

  • The get() function in the above snippet issues a GET request to / example /Event/:1.
  • The parameter:1 in the URL is replaced with $scope.id.
  • The function get() will return an empty object which is populated automatically when the actual data comes from the server.
  • The second argument to get() is a callback which is executed when the data arrives from the server. The possible output of the entire code would be a JSON object which would return the list of Events exposed from the «example» website.

    An example of what can be returned is shown below

    {
    { 'EventName' : 'Angular , 'EventDescription' : 'Angular Basics'},
    { 'EventName' : 'Node , 'EventDescription' : 'Node Basics'},
    { 'EventName' : 'Programming in C++ , 'EventDescription' : 'C++ Basics'}
    
    }

Low-level server interactions with $http

The $http is another Angular JS service which is used to read data from remote servers. The most popular form of data which is read from servers is data in the JSON format.

Let’s assume, that we have a PHP page ( http://example/angular/getTopics.PHP ) that returns the following JSON data

"Topics": [
  {
    "Name" : "Controllers",
    "Description" : "Controllers in action"
  },
  {
    "Name" : "Models",
    "Description" : "Binding data using Models"
  },
  {
    "Name" : "Directives",
    "Description" : "Using directives in Angular"
  }
]

Let’s look at the AngularJS code using $http, which can be used to get the above data from the server

<script>
var app = angular.module('myApp', []);
app.controller('AngularCtrl', function($scope, $http) {
    $http.get("http://example/angular/getTopics.PHP")
    .then(function(response) 
{
$scope.names = response.data.records;});
});
</script>

In the above example

  1. We are adding the $http service to our Controller function so that we can use the «get» function of the $http service.
  2. We are now using the get function from the HTTP service to get the JSON objects from the URL http://example /angular/getTopics.PHP
  3. Based on the ‘response’ object, we are creating a callback function which will return the data records and subsequently we are storing them in the $scope object.
  4. We can then use the $scope.names variable from the controller and use it in our view to display the JSON objects accordingly.

Fetching data from a server running SQL and MySQL

Angular can also be used to fetch data from a server running MySQL or SQL.

Идея заключается в том, что если у вас есть страница PHP, соединяющаяся с базой данных MySQL, или страница Asp.Net, соединяющаяся с базой данных сервера MS SQL , то вам необходимо убедиться, что страница PHP и ASP.Net отображает данные в формате JSON.

Предположим, у нас есть сайт PHP ( http: // example /angular/getTopics.PHP ), который обслуживает данные из базы данных MySQL или SQL.

Шаг 1) Первый шаг — убедиться, что страница PHP берет данные из базы данных MySQL и обслуживает данные в формате JSON.

Шаг 2) Напишите аналогичный код, показанный выше, чтобы использовать службу $ http для получения данных JSON.

Давайте рассмотрим код AngularJS с использованием $ http, который можно использовать для получения вышеуказанных данных с сервера.

<script>
var app = angular.module('myApp', []);
app.controller('AngularCtrl', function($scope, $http) {
    $http.get("http://example /angular/getTopics.PHP")
    .then(function(response) 
{
	$scope.topics = response.data.records;});
});
</script>

Шаг 3) Отобразите данные в вашем представлении, используя директиву ng-repeat.

Ниже мы используем директиву ng-repeat для прохождения каждой из пар ключ-значение в объектах JSON, возвращаемых методом «get» службы $ http.

Для каждого объекта JSON мы отображаем ключ «Имя», а значение «Описание».

<div ng-app="myApp" ng-controller="AngularCtrl"> 
<table>
  <tr ng-repeat="x in topics">
    <td>{{ x.Name }}</td>
    <td>{{ x.Description }}</td>
  </tr>
</table>
</div>

Резюме:

  • Мы рассмотрели, что такое архитектура RESTFUL, представляющая собой не что иное, как функциональность, предоставляемую веб-приложениями на основе обычных HTTP-команд GET, POST, PUT и DELETE.
  • Объект $ resource используется с Angular для взаимодействия с веб-приложениями RESTFUL на высоком уровне, что означает, что мы только вызываем функциональность, предоставляемую веб-приложением, но не заботимся о том, как реализована эта функциональность.
  • Мы также рассмотрели сервис $ http, который можно использовать для получения данных из веб-приложения. Это возможно, потому что служба $ http может работать с веб-приложениями на более детальном уровне.
  • Из-за мощного сервиса $ http его можно использовать для получения данных с MySQL или MS SQL Server через приложение PHP. Затем данные можно отобразить в таблице с помощью директивы ng-repeat.