2015-04-21 3 views
0

за пределами обычных методов запросов ajax от модуля prestashop, я хотел бы использовать метод ajax из product.js и извлекать данные из контроллера переопределения.Запрос Ajax для переопределения контроллера в prestashop 1.6

моя функция в product.js:

function attrReference(ref){ 
    $.ajax({ 
     url: baseUri, 
     async: true, 
     cache: false, 
     type:'GET', 
     dataType : "json", 
     headers: { "cache-control": "no-cache" }, 
     data: { 
       controller :'product', 
       action :'attrReference', 
       token : token, 
       ajax: 1, 
       ref : ref 
     }, 
     success: function(data){ 

     } 
    }); 
} 

Мой продукт контроллер переопределение:

класс ProductController расширяет ProductControllerCore {

public function displayAjaxAttrReference(){ 
    echo '<pre style="background:yellow">'; 
    print_r($_GET); 
    echo '</pre>'; 
    exit; 
} 

}

Из документации, я использую displayAjax для восстановления данных, если это не так, d, я пробовал много попыток, но ни один из них не является правильным.

У вас есть идея?

ответ

2

Если вам нужно получить данные или небольшую часть html, я предлагаю избежать функции displayAjax, поскольку она вызывается только в конце процедуры контроллера и, таким образом, вы получите все обработанное (получение шаблона, запрос базы данных и скоро). обычно функция контроллера называется со следующим списком:

init(); 
setMedia(); 
// postProcess handles ajaxProcess 
postProcess(); 
initHeader(); 
initContent(); 
initFooter(); 
displayAjax() || display(); 

как вы можете видеть displayAjax следует избегать, если вы не хотите, чтобы получить всю страницу/шаблон Требовать всю информацию на странице продукта , Для правильного маршрута вашего запроса, вы должны переопределить также функцию постобработки вашего контроллера продукта таким образом, что:

public function postProcess(){ 
    if(Tools::isSubmit('action') && Tools::getValue('action') == 'attrReference') 
     $this->AjaxGetReference(); 
    parent::postProcess(); 
} 

, а затем

public function AjaxGetReference(){ 
    echo '<pre style="background:yellow">'; 
    print_r($_GET); 
    echo '</pre>'; 
    die(); 
} 

Кроме того, всегда помните, чтобы передать id_product с функцией АЯКСА если вы взаимодействуют с ProductController, иначе любое действие не будет выполнено из-за функции init:

public function init() 
{ 
    parent::init(); 

    if ($id_product = (int)Tools::getValue('id_product')) 
     $this->product = new Product($id_product, true, $this->context->language->id, $this->context->shop->id); 

    if (!Validate::isLoadedObject($this->product)) 
    { 
     header('HTTP/1.1 404 Not Found'); 
     header('Status: 404 Not Found'); 
     $this->errors[] = Tools::displayError('Product not found'); 
    } 
} 
Смежные вопросы