Миграция с 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.