Я хотел бы знать, можно ли «подключиться» к каждому отдельному запросу AJAX (либо при его отправке, либо при событиях) и выполнить действие. На данный момент я предполагаю, что на странице есть другие сторонние скрипты. Некоторые из них могут использовать jQuery, а другие - нет. Это возможно?
104
fetch()
API, теперь в современных браузерах.Ответы:
Вдохновленный ответом Авива , я провел небольшое расследование, и это то, что я придумал.
Я не уверен, что все это полезно в соответствии с комментариями в сценарии, и, конечно, будет работать только для браузеров, использующих собственный объект XMLHttpRequest .
Я думаю, что это сработает, если используются библиотеки javascript, поскольку они будут использовать собственный объект, если это возможно.
источник
ПРИМЕЧАНИЕ. Принятый ответ не дает фактического ответа, поскольку его вызывают слишком рано.
Вы можете сделать это, что в общем будет перехватывать любой AJAX глобально и не испортить какие-либо обратные вызовы и т.д., которые, возможно, были назначены любыми сторонними библиотеками AJAX.
Еще несколько документов о том, что вы можете здесь делать с помощью API addEventListener здесь:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Обратите внимание, это не работает <= IE8)
источник
this.status
в этом случае возвращаю статус сервера,200
если запрос в порядке, 404, если элемент не найден, 500 и т. Д. Но код работает отлично."load"
Событие вызывается только на успех. Если вас не волнует результат (только то, что запрос закончился), вы можете использовать"loadend"
событиеТак как вы говорите JQuery, я знаю , что Jquery предлагает большой
.ajaxSetup()
метод , который устанавливает глобальные параметры Ajax , которые включают триггеры событий , какsuccess
,error
иbeforeSend
- что то , что звучит как то , что вы ищете.конечно, вам нужно будет проверить доступность jQuery на любой странице, на которой вы пытаетесь использовать это решение.
источник
Для этого есть хитрость.
Перед запуском всех скриптов возьмите исходный объект XHMHttpReuqest и сохраните его в другом файле var. Затем переопределите исходный XMLHttpRequest и направьте все вызовы к нему через свой собственный объект.
Псевдокод:
источник
Я нашел хорошую библиотеку на Github, которая хорошо справляется со своей задачей, вы должны включить ее перед любыми другими файлами js.
https://github.com/jpillora/xhook
вот пример, который добавляет заголовок http к любому входящему ответу
источник
Используя ответ «meouw», я предлагаю использовать следующее решение, если вы хотите увидеть результаты запроса
источник
jquery ...
источник
В дополнение к ответу meouw мне пришлось ввести код в iframe, который перехватывает вызовы XHR, и использовал приведенный выше ответ. Однако мне пришлось изменить
Кому:
И мне пришлось изменить
Кому:
Это было необходимо, чтобы заставить его работать в IE9 с режимом документов IE8 . Если это изменение не было внесено, некоторые обратные вызовы, созданные структурой компонентов (Visual WebGUI), не работали. Больше информации по этим ссылкам:
Без этих изменений обратная передача AJAX не прекратилась.
источник