что именно происходит, когда мы используем AJAX - PullRequest
4 голосов
/ 27 февраля 2010

Я не понимаю, что именно происходит, когда мы используем ajax. Страница не обновляется каждый раз, значит что? это связано с методом page_load или с чем

Ответы [ 6 ]

5 голосов
/ 27 февраля 2010

Браузер выполняет http-вызовы в фоновом потоке, и вы используете javascript для изменения DOM, когда возвращается результат. Это не позволяет обновлять всю страницу и может изменять ее части по желанию.

Проверьте определение в Википедии для получения дополнительной информации.

Если вы выполняете ajax в приложении asp.net, page_load будет вызываться для запрашиваемой вами страницы, как обычный вызов. Это рендеринг в браузере, который отличается. ¨ Ключевые понятия: фоновые вызовы и скриптинг.

4 голосов
/ 27 февраля 2010

Чтобы объяснить AJAX, вы должны понять не-AJAX-путь и увидеть разницу, поэтому я приведу тот же пример в традиционной форме и в AJAX-стиле.

В сценарии у вас есть список телефонных номеров, к которому вы хотите добавить любое количество телефонных номеров для клиента, каждая запись имеет два поля: тип и номер. Тип - это описание, например Мобильный дом Работа.

Традиционный

Пользователь видит список телефонных номеров, последний из которых пуст и доступен для редактирования. Они хотят добавить еще один номер телефона, чтобы заполнить пустые поля и нажать кнопку «Добавить». Форма отправляется, поэтому данные упаковываются в сообщение http и отправляются на сервер, серверный код добавляет запись телефонного номера в базу данных и начинает создавать html для новой страницы, поэтому он начинается с htm, head, все сценарии включают в себя, а затем таблицу с данными, включая новую строку с новым номером телефона и еще одно пустое поле.

Запрос

POST /addPhoneNumberForm Http 1.1
HOST:www.host.com
USER-AGENT:...
...
newPhoneType=Home&newPhoneNumber=00649123456

Ответ

<DOCTYPE ....>
<html>
    <head>
       <title="...">
       <link type="text/css" href="standard.css" />
       <script type="text/javascript" src="jQuery1.4.js"></script>
       ...
   </head>
   <body>
      <div id="headerAndNav">
       ....
      </div>
      <div id="content">
          ....
             <table id="addPhoneRecords" class="dataentry">
                 <tr><th>Description</th><th>Number</th></tr>
                 <tr><td>Mobile</td><td>0044987654331</td></tr>
                 <tr><td>Work</td><td>0044987654332</td></tr>
                 <tr><td>Holiday</td><td>0044987654333</td></tr>
                 <!-- Newly Added -->
                 <tr><td>Home</td><td>00649123456</td></tr>
                 <tr><td><input type=text .../></td><td><input type=text .../></td></tr>
             </table> 
          ....
      </div>
      <div id="footer">
        ...
      </div>
   </body>
</html>

Как только пользовательский браузер получает этот ответ, он отбрасывает все, что видит пользователь, заменяет его белым пустым экраном. И начинаем разбирать полученный html как совершенно новую страницу. Любые файлы изображений / Css / Javascript должны быть повторно извлечены (или, по крайней мере, проверить, действителен ли кэш). Любые файлы javascript должны быть запущены, а все сопутствующие события DOM - в файле (document.onLoad и т. Д.).

Итак, пользователь отправил данные, а сервер ответил совершенно новой страницей. Это потребовало больших затрат сетевой активности и времени, а также циклов ЦП на сервере и на клиенте, поскольку они должны были сгенерировать и проанализировать полную HTML-страницу.

AJAX Way

Пользователь видит список телефонных номеров, последний из которых пуст и доступен для редактирования. Они хотят добавить еще один номер телефона, чтобы заполнить пустые поля и нажать кнопку «Добавить». Этот бит был таким же, как традиционный, теперь он становится другим. Когда пользователь нажимает кнопку вместо формы, отправляющей кусочек javascript, собирает релевантную информацию из формы и отправляет AJAX-запрос на сервер с использованием XMLHttpRequest, это отправляет запрос, похожий на сообщение формы, но результат будет возвращен в виде строки JavaScript, а не веб-страницы.

Запрос

POST /addPhoneNumberAJAX Http 1.1
HOST:www.host.com
USER-AGENT:...
...
newPhoneType=Home&newPhoneNumber=00649123456&ajax=true&type=json

Существует большое количество вариантов того, что может вернуть сервер. Я выбрал один пример. Ответ

{phoneType:"home",phoneNumber:"00649123456"};

Это в JavaScript Object Notation (JSON) и представляет объект с двумя типами phoneType и phoneNumber. Как только это получено, JavaScript используется для динамического добавления новой строки в существующую таблицу. JavaScript будет выглядеть примерно так.

addPhoneViaAjax(type, number, reqObj, xmlhttp){
    // Construct url and declare parameters for our request
    xmlhttp.open("POST","addPhoneNumberAJAX?newPhoneType="+type ...,false);
    // Send the request and wait for the response
    xmlhttp.send(null);
    // For example assume response successful
    // Get the response as text
    var responseStr = xmlhttp.responseText;
    // Convert the response to object, preferably using one of the JSON parsing libaries
    var responseObj = eval(responseStr); // Please use one of the JSON parsing libaries look at Jquery.forms plugin
    // Use jquery javascript libary to update the table in place.
    // by finding the last row of the table and instering html before it.
    jQuery("table#addPhoneRecords tr:last-child").before(
         "<tr><td>" + responseObj.phoneType +
         "</td><td>" + responseObj.phoneNumber +
         "</td></tr>");
}

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

2 голосов
/ 27 февраля 2010

Ajax - это простой код Javascript. и страница не обновляется сама по себе, вам нужно обновить ее - когда вы считаете, что это необходимо (мы обычно основываем ее на результатах вашего сервера после возвращения запроса).

Да, он открывает фоновое соединение вашего браузера с вашей ASP-страницей. и когда вы закончите - вы можете обновить только один объект DOM на вашей странице.

Для чего это? Почему мы используем это ? Посмотрите на Facebook, например, когда вы отклоняете уведомление, игнорируете, одобряете, комментируете то, что имеет в виду ваш друг - вы не обновляете страницу - вы (как разработчик) можете изменить свойства клиента (в БД для ex) с / без, давая ему знать.

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

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

и есть JS-фреймворки, которые делают его действительно простым. например: (этот пример является примером jQuery ..)

function call_my_page() {
    $.post("/get_list.asp", {
       param1: "a",
       param2: "b"
    }, function ( server_response ) {
       alert(server_response);

       if ( server_response == 1 ) {     window.location.refresh;      }
    }
}

call_my_page();

get_list.php - это файл на вашем сервере, который будет опубликован ($ .post)

param1, param2 - это переменные, которые вы передаете на сервер.

и если файл страницы вашего сервера возвращает ответ "1" тогда - ваша страница будет обновлена. (или только DIV / SPAN / TABLE будет заменен новым HTML)

JQuery. самый лучший.

1 голос
/ 27 февраля 2010

Перейдите к любому ТАКому сообщению с более чем двумя комментариями, и вы увидите ссылку, которая говорит что-то вроде , чтобы показать еще 99 комментариев ниже этого. Теперь, если вы нажмете на него, вы увидите, что указанные 99 комментариев загружаются в секунду или две, а оставшаяся страница остается без изменений. Это потому, что «страница не обновляется» - это заняло бы больше времени, если бы страница была обновлена, поскольку это означало бы перезагрузку всего HTML-содержимого.

Вместо повторной отправки всей HTML-страницы (включая другие сообщения в той же ветке) сервер отправляет только запрошенные данные (только эти 99 комментариев в нашем примере).

Возможности огромны. Сервер может возвращать любые данные - html или text или xml или json или что угодно. Вы можете отобразить полученные данные с помощью JavaScript.

Код на стороне сервера обрабатывает AJAX-запрос так же, как и обычный HTTP-запрос (хотя вы можете переопределить его, используя заголовок HTTP_X_REQUESTED_WITH).

1 голос
/ 27 февраля 2010

Используя JavaScript, можно совершать звонки на веб-страницы. Кроме того, используя JavaScript, можно заменить содержимое страницы чем-то новым (манипулируя DOM ).

Итак, Ajax (асинхронный JavaScript) - это процесс объединения этих двух методов. Вы посещаете какую-то страницу (обычно на своем собственном сервере), получаете ее результаты, а затем берете эти данные и что-то делаете с ними (каким-то образом меняете страницу).

Это основная идея.

0 голосов
/ 27 февраля 2010

Ваш проводник устанавливает nem-соединение с сервером и получает данные. Или, если соединение поддерживается живым, оно использует живое.

...