Столкнулся с проблемой, когда для выполнения Ajax запроса необходимо открывать php страницу, но если страница не прописана в MVC модели компонента Joomla, то ее вызов блокируется безопасностью.
Выход из ситуации - записать обработку POST и GET запросов на странице заголовков view.html.php (/administrator-site/view/<Наименование>/)
На примере задачи : На форме расположен input, необходимо разместить кнопку, которая обновит запись в БД, по результату спрятать элементы .
Реализация Script на основной странице:
<script>
jQuery("body").on("click", ".btn_ex_save", function(e) {
e.preventDefault();
//ищем ID в БД
var clickedID = this.id.split("-");
var DbNumberID = clickedID[1];
//данные для отправки POST запросом
var myData = 'recordToEx='+DbNumberID+'&recordSTR='+document.getElementById('quant-'+DbNumberID).value;
jQuery.ajax({
type: "POST",
url: "index.php?option=op1&view=v1",//ссылка на текущую страницу
dataType:"text",
data:myData,
success:function(response){
document.getElementById('div-'+DbNumberID).style.display= "none";},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
});
</script>
Реализация HTML на основной странице:
<input type="number" min="0" max="999" id="quant-<?php echo $item->id;?>" style="width: 104px;" value="<?php echo $item->orderitem_quantity; ?>" onchange="document.getElementById('div-<?php echo $item->id;?>').style.display='';document.getElementById('quant-<?php echo $item->id;?>').style.backgroundColor='#FFA9A9';">
<div style="display:none;position: relative;float: right;top: 8px;" id="div-<?php echo $item->id;?>" >
<a style="top: -4px;position: relative;" href="#" class="btn_ex_save" id="exs-<?php echo $item->id;?>">
<img src="/images/save.gif" />
</a>
</div>
Реализация обработки запроса на странице заголовков view.html.php:
if(isset($_POST["recordToEx"])){
$idToUpd = str_replace('-','',filter_var($_POST["recordToEx"],FILTER_SANITIZE_NUMBER_INT));
$ex = str_replace($idToUpd.'-','',filter_var($_POST["recordSTR"],FILTER_SANITIZE_STRING));
if (trim($ex) != '')
{ $ex = $ex.'|';
$query =htmlspecialchars("update #__table set txt ='".$ex."' where id='".$idToUpd."'");
$db->setQuery($query);
if(!$db->query())
{
header('HTTP/1.1 500 '.JText::_('Ошибка ID = '.$idToUpd.' '.$db->stderr()));
exit();
}
}
exit();
}