Миграция с jQuery (v1.8)

AJAX Simply

Примечания по совместимости для 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.