Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Остановка обращений к файлу при помощи аякс запроса (https://javascript.ru/forum/misc/61426-ostanovka-obrashhenijj-k-fajjlu-pri-pomoshhi-ayaks-zaprosa.html)

Ambassador 17.02.2016 19:29

Остановка обращений к файлу при помощи аякс запроса
 
Вложений: 1
Здравствуйте.
Реализовываю рассылку с сайта, при помощи js вызываю файл в котором выборки на php и отправка писем. Сам js файл выглядет так:
/*По нажитию кнопки вызываю фун. в котоую передаю 1*/
$(document).ready(function(){
	$('#start_upload_vac').on('click',function(){
		$('#start_upload_vac').val('Загрузка ...').attr('disabled',true);

		scriptOffset('1');

	});
});

function showProcess(PAGE) {
      scriptOffset(PAGE);
}
/*Делаю аякс запрос к файлу test.php с выборками и отправкой писем*/
function scriptOffset(PAGE) {

	$.ajax({
		type: 'GET',
		url: '/test/test.php?PAGE='+PAGE,
		dataType: 'json',
		success: function(request) {
          if(request.end == 'Y') {
                          
		$('#logs').html('<a class="show_log" rel="add" target="_blank" href="/test/logs.php">Логи рассылки акций</a>');
	} else {
                                 
		showProcess(request.PAGE);
	}
			
		} 
	});
}


В самом файле test.php после всех выборок и отправки писем делаю так:
$PAGE = (isset($_GET['PAGE']) && intval($_GET['PAGE']) > 0) ? intval($_GET['PAGE']) : 1;
/*Выборки и отправка писем*/
if($count > $PAGE) {
        $PAGE++;
        echo json_encode(array('PAGE'=>$PAGE));
        } else {
           echo json_encode(array('end'=>'Y'));	
	}

Где $count число писем которое необходимо отправить.
Т.е каждое письмо на отправку это вызов файла test.php
Все вроде бы ничего, пока не дойдет до значения в 1183 (скрин во вложении) и останавливается, т.е отправка всех писем не доходит до конца. Сама отправка тоже не причем так как даже без нее кол-во обращений к файлу останавливается. Реализовываю именно таким метотодом по причине того что необходимо отправлять примерно 50000 писем. Подскажите из за чего может возникать такая проблема?Как исправить?
Заранее спасибо!

laimas 17.02.2016 19:37

Цитата:

Сообщение от Ambassador
Все вроде бы ничего, пока не дойдет до значения в 1183...
Реализовываю именно таким метотодом по причине того что необходимо отправлять примерно 50000 писем.

И хостер ваш еще вам втык не дал за такую рассылку?

Рассылки нужно производить планировщиком задач, по расписанию не нагружая порт.

Deff 17.02.2016 19:54

Ambassador,
Типично весь пакет писем с клиента(или часть пакета, обычно ограничивают 600 -700 кб)
упаковывают в один файл и отправляют на серв, а серв разбирает пакет и уже сам отправляет)

Ambassador 22.02.2016 18:32

Ребят, проблема заключается не в самом кол-ве отправке писем, а в том что кол-во обращений к файлу при помощи ajax прерывается на 513

Deff 22.02.2016 18:38

Ambassador,
Допустимых одновременных необработанных ассинхронных Аякс запросов с домена из браузера - не более 5. Возможно есть и ограничения по общему числу запросов за какой-то интервал времени, которое ксать может быть и на провайдере
Вы вытворяете черт знает что и спрашиваете почему на 513 затыкается.
Еще раз: собирайте письма в пакеты по 500-600 кб - отправляйте одним запросом, дожидайтесь ответа(т.е тестируете событие ajaxComplete, после которого следущий запрос. Можно конечно отправить синхронно, но 500-600кб повесит Ваш браузер типично на время более одной секунды.

destus 22.02.2016 19:15

Цитата:

Можно конечно отправить синхронно, но 500-600кб повесит Ваш браузер типично на время более одной секунды.
а если в фоновом режиме посылать запросы?

laimas 22.02.2016 19:29

Цитата:

Сообщение от destus
а если в фоновом режиме посылать запросы?

Рассылку нужно отправлять планировщиком задач севера, клиентский же интерфейс нужен лишь для того, чтобы выбрать источник сообщений, указать параметры отправки. Отправлять в реальном режиме времени, ожидая окончания оправки, клиентом да еще 50000, это самоубийство.


Часовой пояс GMT +3, время: 03:20.