У меня есть список URL, которые нужно удалить.Я получаю эти URL-адреса из HTML-таблицы и в функции контроллера я помещаю их в цикл foreach.У меня есть две кнопки Start scrapping и Stop scrapping.
Я работаю с функцией утилизации, которая записана в контроллере и вызывается функцией ajax при нажатии кнопки Start scrapping button.
Сейчасмое требование - остановить текущий текущий процесс, когда я нажимаю кнопку «Остановить удаление».
Я много гуглил и пробовал использовать переменные, сеансы и т. д. Gloabal, но все это работает только после завершения первого процесса, которыйприходит в состояние ожидания в сети.
Пожалуйста, помогите мне, как я могу остановить текущий процесс php, когда я нажимаю кнопку Stop scrapping.
Ниже приведена функция вызова ajax для Start scrapping
$("#get_data").click(function()
{
var values = new Array();
$.each($("input[name='case[]']:checked"), function()
{
var data = $(this).parents('tr:eq(0)');
values.push({
'weburl':$(data).find('td:eq(3)').text() ,
'id' : $(data).find('td:eq(2)').text() ,
'state':$(data).find('td:eq(6)').text()
});
});
sendmyarray(values);
});
function sendmyarray(values)
{
var location = '<?php echo base_url()?>';
var x = $.ajax({
type: "POST",
url: location+'admin/AdminController/getArrayAndScrap',
data: {myData:JSON.stringify(values)},
beforeSend: function() {
$("#stop_get_data").css("display", "block");
$("#get_data").prop('disabled', true); // disable button
},
success: function (response) {
$("#get_data").prop('disabled', false);
$("#stop_get_data").css("display", "none");
console.log(response);
if(response == 'stop')
{
alert("Process Stopped");
}
if(response == " ends")
{
alert("Process completed. Please check the status of the URLs processed!");
}
}
});
}
// BElow - функция контроллера // // - Функция для получения массива url и состояния выбранной строки;и соответственно списать их
public function getArrayAndScrap()
{
if(isset($_POST['myData']))
{
$json = $_POST['myData'];
$myDataArray = json_decode($json,true);
foreach ($myDataArray as $url)
{
$status = $this->CommonModel->getSingleData('dtl_scrap_status','ws_detail',array('dtl_scrap_id' => $url['id']));
if( $status['dtl_scrap_status'] != 'Scrapped')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12); // 12 seconds
curl_setopt($ch, CURLOPT_URL, $url['weburl']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
if($html === false)
{
$this->CommonModel->addData('ws_detail' , array('dtl_scrap_status' => curl_error($ch) , 'dtl_scrap_id' => $url['id'] , 'dtl_state' => $url['state'] , 'dtl_website' => $url['weburl']));
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
}
else
{
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title'); // TITLE
$metas = $doc->getElementsByTagName('meta'); // Meta
$head = $doc->getElementsByTagName('h1'); // H1
if(isset($nodes->item(0)->nodeValue))
{
$title = $nodes->item(0)->nodeValue;
}
if(isset($head->item(0)->nodeValue))
{
$heading = $head->item(0)->nodeValue;
}
if(isset($metas))
{
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'keywords') // Keyword
$keywords = $meta->getAttribute('content');
if($meta->getAttribute('name') != '')
{
if($meta->getAttribute('name') == 'description') // meta description
{
$description = $meta->getAttribute('content');
}
}elseif($meta->getAttribute('property') != '')
{
if($meta->getAttribute('property') == 'og:description') // meta Og:description
{
$OgDescription = $meta->getAttribute('content');
}
}
}
}
curl_close($ch);
if(isset($url['state']))
{
$addDtl['dtl_state'] = $url['state'];
}
if(isset($heading))
{
$addDtl['dtl_program_name'] = $heading;
}
if(isset($title))
{
$addDtl['dtl_program_provider'] = $title;
}
if(isset($description))
{
$addDtl['dtl_program_description'] = $description;
}elseif(isset($OgDescription))
{
$addDtl['dtl_program_description'] = $OgDescription;
}
if(isset($keywords))
{
$addDtl['dtl_program_keywords'] = $keywords;
}
if(isset($url['weburl']))
{
$addDtl['dtl_website'] = $url['weburl'];
}
if(isset($url['id']))
{
$addDtl['dtl_scrap_id'] = $url['id'];
}
$addDtl['dtl_scrap_status'] = 'Scrapped';
if($this->CommonModel->addData('ws_detail' , $addDtl))
{
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
}else
{
// echo "Error";exit();
}
} // End of else
} // End of status check
else
{
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
// echo "alscrapped";exit();
}
} // End of foreach
echo "ends";
} // End of if(isset)
}
// Что-то, что я хочу по сценарию ниже (AJAX CALL) //
$('#stop_get_data').click(function()
{
return false (from the function which is in running state after click event of start scrapping);
});
Для меня важна любая помощь.Спасибо