nmeri17 Ответов: 0

Можно ли сделать асинхронные и синхронизирующие запросы xhr на одной странице?


Привет. Я использую jQuery Mobile для питания страницы, и то, как настроена библиотека, она захватывает каждую ссылку на странице и делает их асинхронными. Я не хочу, чтобы JQM вмешивался в исходящие ссылки. Пока что установка $.mobile.ajaxEnabled = false прекрасно работать. Проблема в том, что мне нужно делать асинхронные запросы через определенный промежуток времени. Отключение ajax-запросов означает, что страница блокируется на время этих интервалов. Плохие новости для тех, кто работает в медленных сетях или если сервер не отвечает достаточно быстро.

Что я уже пробовал:

Чтобы обойти это, я попробовал использовать


$.get('/livePercentage/live')

	.then(function(data) {	

		$.mobile.ajaxEnabled = false; // disable it so jqm doesn't tie up our outbound links

		assignPerc(JSON.parse(data));
	})

	// subsequent
	.then(() => setInterval(function() {	

		$.mobile.ajaxEnabled = true;

		$.get('/livePercentage/live')

		.then(function(data) {	

			$.mobile.ajaxEnabled = false;

			assignPerc(JSON.parse(data));
		});
	},1000*60*4));


Но все стало намного, намного хуже. По сути, я пытаюсь приостановить синхронизацию всякий раз, когда собираюсь запустить асинхронный запрос, а затем возобновить его после этого. Я не думаю, что кто-то будет нажимать исходящие ссылки, пока продолжаются фоновые запросы.

Приведенный выше фрагмент кода замораживает страницу примерно на целых 4 минуты (что может быть связано с 4-минутным интервалом функции setInterval. Возможно ли предотвратить вмешательство со стороны jqm, все еще позволяя пользователю взаимодействовать?

nmeri17

Sorry, I didn’t mean synchronous Ajax requests. What I intend to make is regular requests/page navigation (instead of the preventdefault they’re using to hijack my links after their Dom manipulations). If I click on “/Xxx”, I want to leave the current page and go to mysite/xxx rather than jqm loading “/xxx” asynchronously. The only links I want jqm to attach events to are page anchors like “#section5” but there’s no way I know of to do specify links to it. It automatically prevents default on all links and tries loading them asynchronously. I can’t remove the listeners on these links because they’re anonymous so my best bet is to disable asynchronous altogether.

Проблема с этим подходом заключается в том, что мне трудно перезапускать и повторно приостанавливать асинхронность.

0 Ответов