У меня есть партнерский веб-сайт, который работает на собственной базе c 'CMS', которую я создал несколько лет go. Когда я отображаю цены продуктов на своем веб-сайте, я создал сценарий PHP для обновления цен на все продукты в моей базе данных, используя API рекламы продуктов Amazon, который просматривает каждый код ASIN и определяет, есть ли разница в цене с product в моей БД и обновляет его при необходимости.
Раньше я делал это просто PHP, но заметил, что время соединения часто истекает из-за большого количества товаров, просматриваемых за один вызов. Поэтому недавно я создал рабочее решение с AJAX, которое выполняет отдельный вызов для каждого идентификатора. Вкратце: у меня есть страница со скрытым числовым полем с идентификатором продукта - я делаю первый (product # 1) AJAX вызов - если он возвращает заголовок успеха, идентификатор увеличивается и вызов повторяется для ID # 2 и т. Д.
Это прекрасно работает, но мне все еще нужно go перейти на страницу и нажать кнопку, чтобы начать первый AJAX вызов. Поэтому я хочу сделать это с помощью задания cron.
Проблема в : как предотвратить истечение времени ожидания соединения, когда мне нужно l oop до 300+ продуктов с помощью API? Есть ли способ проверить один продукт, подождать, пока он вернет успешный ответ, затем проверить продукт № 2 и так далее? Я знаю, что не могу использовать AJAX вызовы в заданиях cron.
Это (упрощенный) код AJAX, который я использую:
$('body').on('click', '#check_prices', function (e){
e.preventDefault();
var max = $('#max').val();
var id = parseInt($('#id').val());
var formData = new FormData($(this).closest('form')[0]);
$.ajax({ type: 'POST', url: url, cache: false, contentType: false, processData: false, data: formData })
.done(function(response) {
$('#results').append("<p style='color:green'>"+response+"</div>");
$('#id').val(id+1);
if(id <= max) {
setTimeout( function() { $('#check_prices').trigger('click'); }, 1500);
} else {
$('#results').append("<p style='color:green'>All "+max+" products updated!</div>");
}
})
.fail(function(data) {
if (data.responseText !== '') {
$('#results').append("<p style='color:red'>"+data.responseText+"</div>" );
} else {
$.notify("Something went wrong, please try again.","warning");
}
});
});
Сценарий PHP является простой скрипт, который я нашел в интернете и настроил под свои нужды. Для проверки каждого продукта используется функция getAmazonPrice("com", $asin)
.
Любая помощь будет принята с благодарностью!