Миграция с jQuery
AJAX SimplyПримечания по совместимости и переходу на ajaxs.js (vanilla) с jquery.ajaxs.js (legacy).
Активация
- При новой установке используется вариант без jQuery.
- При обновлении до 1.8.0 сохраняется jQuery-вариант, который можно переключить на ванильную версию в настройках:
Отличия в 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 // <<< это нужно добавить
// ваш легаси код
} )
Отличие в порядке параметров колбэка .fail()
Для консистентрости изменён порядок параметров в колбэках 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.
