Яка різниця між XMLHttpRequest, jQuery.ajax, jQuery.post, jQuery.get


121

Як я можу дізнатися, який метод найкращий для ситуації? Чи може хтось навести кілька прикладів, щоб знати різницю у функціональності та продуктивності?


4
Щодо виступів (ледве відповів): згідно з jsperf, використання звичайного XMLHttpRequest набагато швидше, ніж проходження jQuery.
e2-e4

Відповіді:


145
  • XMLHttpRequest - це необроблений об’єкт браузера, який jQuery перетворює на більш зручну та спрощену форму та підтримує функціональність між браузером.

  • jQuery.ajax є загальним запитувачем Ajax у jQuery, який може робити будь-які запити типу та вмісту.

  • jQuery.getа jQuery.postз іншого боку може видавати лише запити GET та POST. Якщо ви не знаєте, що це, слід перевірити протокол HTTP і трохи навчитися. Внутрішньо ці дві функції використовують, jQuery.ajaxале вони використовують окремі налаштування, які вам не потрібно встановлювати, таким чином, спрощуючи GET або POST-запит порівняно з використанням jQuery.ajax. GET і POST є найбільш використовуваними методами HTTP у будь-якому випадку (порівняно з DELETE, PUT, HEAD або навіть іншими рідко використовуваними екзотиками).

Усі функції jQuery використовують XMLHttpRequestоб'єкт у фоновому режимі, але надають додаткову функціональність, яку вам не доведеться виконувати самостійно.

Використання

Тож якщо ви використовуєте jQuery, я настійно рекомендую використовувати лише функціонал jQuery . Забудьте про XMLHttpRequestзагальне. Використовуйте відповідні варіації функцій запиту jQuery і в усіх інших випадках використовуйте $.ajax(). Так що не забувайте , що є і інші пов'язані з загальним JQuery Ajax функції до $.get(), $.post()і $.ajax(). Ну, ви можете просто використовувати $.ajax()для всіх своїх запитів, але вам доведеться написати трохи більше коду, оскільки для його дзвінка потрібно трохи більше варіантів.

Аналогія

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


Чи є якась перевага у використанні $ .ajax () з точки зору продуктивності?
Родрігес

1
@Rodrigues: не дуже. Якщо ви думаєте $.postі $.getєдине, що повільніше - це невелика кількість коду, перш ніж $.ajaxвикликати. Але якби ви писали свої власні процедури, використовуючи безпосередньо XHR, речі можуть бути трохи оптимізовані, але можуть бути більш баггі. Я пропоную вам тримати себе на стороні jQuery. Це полегшить ваше життя. А враховуючи той факт, що виклик асинхронізації займає набагато більше часу, ніж код, який його видає, ви, ймовірно, не помітите очевидних відмінностей між цими дзвінками.
Роберт Коритник

Дякую Роберту Коритнику. тому я отримаю з $ .post і $ .get.
Родрігес

Ви також можете піти з тим, $.ajaxщоб зробити свої дзвінки послідовними скрізь, якщо хочете. Поки ви не використовуєте XHR безпосередньо, ви хочете робити це в будь-якому випадку.
Роберт Коритник

1
@RobertKoritnik, що з проблемою кешування в IE? Це те саме, використовуючи XMLHttpRequest та $ .ajax ()?
Bhargavi Gunda

28

Кожен з них використовує XMLHttpRequest. Це те, що браузер використовує для здійснення запиту. jQuery - це лише бібліотека JavaScript і $ .ajax метод використовується для створення XMLHttpRequest.

$ .post і $ .get - це лише скорочені версії $.ajax. Вони роблять майже те саме, але роблять більш швидким написання запиту AJAX - $.postробить HTTP POST-запит і $.getробить HTTP GET-запит.


про обмеження передачі даних для кожної функції для завантаження та завантаження
Rodrigues

GETЗапит відправить всі дані в рядку URL - який може бути обмежена клієнт / сервер ( stackoverflow.com/questions/2659952 / ... ). А POSTзапити відправляє всі дані в заголовках, так що граничний розмір URL не повинен бути проблемою (якщо у вас є дійсно довгий файл і імена папок на ваш сценарій!).
Джонатан Болстер

гаразд. Отже, коротше, у середньому, відправляти більше публікацій для використання даних та отримувати більше використання даних get, правда?
Родрігес

@Rodrigues - Так, досить :) Як правило, якщо ви просто хочете щось прочитати (наприклад, прохання отримати список твітів з твіттера) GET. Якщо ви хочете щось надіслати (наприклад, опублікувати твіт), тоді використовуйте POST,
Jonathon Bolster

7

jQuery.get є обгорткою для jQuery.ajax , яка є обгорткою для XMLHttpRequest.

API XMLHttpRequest та Fetch (експериментальний на даний момент) є єдиними в DOM, тому повинні бути найшвидшими.

Я бачив багато інформації, яка вже не є точною, тому я зробив тестову сторінку, де кожен може перевірити версію, версія якої найкраща в будь-який час:

https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch

З моїх тестів сьогодні видно, що тільки jQuery не є чистим або навіть швидким рішенням, результати для мене на мобільних або на робочих столах показують, що jQuery принаймні на 80% повільніше, ніж XHR2, якщо ви використовуєте занадто багато ajax, в мобільному буде потрібно багато часу, щоб завантажити простий сайт.

Саме використання також знаходиться у посиланні.


2

jQuery.post і jQuery.get імітують типові завантаження сторінки, тобто, ви натискаєте кнопку подання, і вона переносить вас на нову сторінку (або перезавантажує ту саму сторінку). розміщувати та отримувати незначні відмінності в способі надсилання даних на сервер (хорошу статтю про них можна знайти тут .

jQuery.ajax та XMLHttpRequest - це завантаження сторінки, подібне до публікації та отримання, за винятком того, що сторінка не змінюється. Незалежно від інформації, яку повертає сервер, JavaScript може використовуватися локально для будь-якого використання, включаючи зміну макета сторінки. Вони зазвичай використовуються для асинхронної роботи, поки користувач все ще може переходити по сторінці. Хорошим прикладом цього можуть бути функції автозаповнення, динамічно завантажуючи зі значень бази даних, щоб заповнити текстове поле. Принципова відмінність jQuery.ajax від XMLHttpRequest полягає в тому, що jQuery.ajax використовує XMLHttpRequest для досягнення того ж ефекту, але з більш простим інтерфейсом. Якщо ви використовуєте jQuery, я б закликав вас дотримуватися jQuery.ajax.


яка перевага використання jquery над створенням об'єкта XMLHttpRequest xmlhttp.open, send () та responseText.
Родрігес

Об'єкт XMLHttpRequest інстанціюється по-різному відповідно до вашого поточного браузера для однієї речі. Вам потрібно буде обміняти трохи обслуговування Javascript, щоб забезпечити базовий інтерфейс за допомогою XMLHttpRequest. Якщо у вас вже є jQuery, він все робить для вас. Це справді питання зручності, а не функціональності, оскільки технічно ви можете зробити те саме, що і з одним. Не кажучи вже про те, що оскільки jQuery обгортає об’єкт XMLHttpRequest, це означає, що він надає його вам у випадку, якщо ви хочете зробити з ним щось конкретне.
Ніл

ок .. Дякую Нілу за вашу пропозицію ... чи є якісь IDE, такі як візуальна студія, доступні для використання та налагодження jquery за допомогою php чи aspx.
Родрігес

Важко знайти IDE, який дозволяє налагоджувати і JavaScript, і php, або aspx, просто тому, що один - сервер, а другий - клієнт. Це означає, що, на жаль, вам доведеться налагоджувати javascript окремо. Однак я виявив, що firebug ( getfirebug.com ) є чудовим для налагодження javascript в цілому. Помістіть точку перерви у функції зворотного дзвінка, і вона покаже вам усе, що вам надає сервер, і крок за кроком, і все, що ваш JavaScript робить з цим. Сподіваюся, що це допомагає.
Ніл

1

Старий пост. але все ж хочу відповісти, одна різниця, з якою я зіткнувся під час роботи з веб-працівниками (javascript)

працівники Інтернету не можуть мати доступу до інтерфейсу користувача. Це означає, що ви не можете отримати доступ до будь-яких елементів DOM у коді JavaScript, який ви збираєтеся запустити за допомогою веб-працівників. До таких об'єктів, як вікно, документ та батьків не можна отримати доступ до коду веб-працівника.

Як ми знаємо, бібліотека jQuery прив’язана до HTML DOM, і це дозволить порушити правило "немає доступу до DOM". Це може бути трохи боляче, оскільки такі методи, як jQuery.ajax, jQuery.post, jQuery.get, не можна використовувати у веб-працівників. На щастя, ви можете використовувати об’єкт XMLHttpRequest для того, щоб робити запити Ajax.


0

Що стосується методів jQuery, .postа це .getпросто робити .ajaxвнутрішньо, їх мета полягає в тому, щоб абстрагувати деякі непотрібні параметри .ajaxі відповідно надати деякі за замовчуванням відповідні цьому типу запиту.

Я сумніваюся, що між будь-яким із цих трьох є велика різниця.

.ajaxМетод сам по собі робить XMLHttpRequest, це буде сильно оптимізовані відповідно з іншою частиною JQuery, але це , ймовірно , не буде настільки ж ефективним , як якщо б ви спеціально все взаємодія себе .. але це різниця між написанням великої кількості коду або написання jQuery.ajax.


чи є якась перевага в налаштуванні jQuery.ajax
Rodrigues

Я маю на увазі, що ви маєте на увазі використання його за допомогою методів скорочень, на моєму досвіді я вважаю, що ці скорочення корисні, якщо більшість за замовчуванням - це те, що ви хочете, якщо вам потрібно бути дуже конкретним щодо того, як отримати потрібні вам дані. Аякс - це зазвичай шлях.
Стів

Спасибі Стів. буде використовувати пошту та отримати. якщо ти наводимо кілька прикладів .ajax, я можу зробити порівняння.
Родрігес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.