Миграция с jQuery (v1.8)
AJAX Simply- Примеры
- FAQ
- Встраивание плагина в проект (не плагин)
- Установка через Composer
- Миграция с jQuery (v1.8)
Примечания по совместимости для v1.8.0: ajaxs.js (vanilla) vs jquery.ajaxs.js (legacy)
В версии v1.8.0 основной скрипт плагина был переписан на нативный JS (без jQuery). В связи с этим были внесены некоторые структурные изменения, которые могут нарушить обратную совместимость.
Активация
- При новой установке используется vanila-режим (без jQuery).
- При обновлении до 1.8.0+ сохраняется jQuery-вариант, который можно переключить на ванильную версию вручную в настройках:
Основные отличия (код, который может потребовать обновления)
ajaxs()возвращает нативныйXMLHttpRequestс добавленными методами.done .fail .alwaysи promise-методами.then .catch .finally.data.ajax.dataType,data.ajax.processData,data.ajax.contentTypeигнорируются. Для заголовков используйтеdata.ajax.beforeSend(), для типа ответа —data.ajax.xhrFields.responseType.data.ajax.headersне поддерживается; задавайте заголовки вdata.ajax.beforeSend().- Опции, специфичные для jQuery, и хелперы jqXHR недоступны.
Отличия в payload событий
События ajaxs_* теперь являются нативными CustomEvent. Данные передаются в event.detail, а не аргументами jQuery trigger.
jQuery (старое):
jQuery( document ).on( 'ajaxs_done', function( event, data, jx ){
// data = objdata
} )
Vanilla (новое):
document.addEventListener( 'ajaxs_done', event => {
const { data, jx } = event.detail
} )
Так тоже будет работать:
jQuery( document ).on( 'ajaxs_start', ( event, data ) => {
data = data || event.detail.data // <<< это нужно добавить
// ваш легаси код
} )
Отличие в порядке параметров callback-а .fail()
Изменился порядок параметров callback-а в ajaxs().fail() и ajaxs( ..., failFunc ).
jQuery (старый вариант):
ajaxs( 'my_action' )
.fail( ( xhr, status, error ) => {
// code
} )
Vanilla (новый вариант):
ajaxs( 'my_action' )
.fail( ( error, status, xhr ) => {
// code
} )
То же самое для сигнатуры ajaxs( ..., failFunc ):
jQuery (старый вариант):
ajaxs( 'my_action', {}, null, null, ( xhr, status, error ) => {
// code
} )
Vanilla (новый вариант):
ajaxs( 'my_action', {}, null, null, ( error, status, xhr ) => {
// code
} )
Больше нет jqXHR
ajaxs() возвращает нативный объект XMLHttpRequest, к которому добавлены методы .done .fail .always и .then .catch .finally. До этого возвращалась jQuery обертка jqXHR.
Поэтому jQuery-специфичные опции и хелперы jqXHR больше не будут работать. Также не будут работать jqXHR параметры передаваемые в data.ajax:
ajaxs( 'my_action', {
foo: 'bar',
ajax: {
headers: ...,
dataType: ...,
processData: ...,
contentType: ...,
}
} )
Теперь все делается через data.ajax.beforeSend() и параметр data.ajax.xhrFields
ajaxs( 'my_action', {
foo: 'bar',
ajax: {
beforeSend( xhr ){
xhr.setRequestHeader( 'X-Request-Source', 'ajax-simply' )
},
xhrFields: {
timeout: 15000,
withCredentials: true,
responseType: 'json'
}
}
} )
Впрочем все это скорее всего вам не понадобится. Для плагина Ajax Symply эти параметры очень специфичная штука и скорее всего вы их просто не использовали.
Редкие отличия (edge cases)
-
window.jxs.handle_extra,window.jxs.consoleHTML,window.jxs.ajaxs_data,window.jxs._collect_dataбольше не являются публичными API. -
FormData, переданный вajaxs(), клонируется перед использованием. Последующие изменения не влияют на запрос. -
При наличии файлов значения объектов сериализуются иначе:
- раньше: объекты разворачивались в несколько
name[]полей - сейчас: plain-объекты JSON-сериализуются в одно поле
- раньше: объекты разворачивались в несколько
-
<input type="file" multiple>безname[]теперь отправляет несколько файлов (раньше[]в имени были обязательны). -
extra.triggerтеперь диспатчит нативные DOM-события; дополнительные параметры передаются черезevent.detail. -
Для анализа XHR-ошибок используйте
xhr.responseвместоxhr.responseJSON. extra.htmlтеперь повторно вставляет HTML и выполняет<script>теги из полученного HTML.
