我有一个javascript文件,我在不同的按钮上有两个ajax调用。我有一个控制器Auction.php,其中我有两个动作的函数(showPopup和askBidControl),但对于第二个函数,ajax返回404 not found。它甚至不进入initContent函数。以下是代码示例:
class askbidAuctionModuleFrontController extends ProductControllerCore {
public function initContent(){
$this->ajax = true;
parent::initContent();
}
public function displayAjaxShowPopup(){
$type = Tools::getValue('type');
switch($type){
case 'bid':
break;
case 'ask':
break;
default:
return false;
}
$product = $this->getTemplateVarProduct();
ob_end_clean();
header('Content-Type: application/json');
$tpl = _PS_MODULE_DIR_.'askbid/views/templates/front/productPopUp.tpl';
$this->context->smarty->assign('product', $product);
$this->context->smarty->assign('type', $type);
$html = $this->context->smarty->fetch($tpl);
$this->ajaxDie(Tools::jsonEncode([
'askbid_popup' => $html,
'product' => $product,
]));
}
public function displayAjaxAskBidControl(){
$type = Tools::getValue('type');
$price = Tools::getValue('price');
ob_end_clean();
header('Content-Type: application/json');
die('saracie');
// $this->ajaxDie(Tools::jsonEncode(['trafalet']));
}
}
JS:
$(document).ready(function(){
$('.askBidButton').on('click', function () {
let buttons_container = $("#askbid_buttons");
let data = {
'action': 'showPopup',
'id_product': buttons_container.data('id-product'),
'id_product_attribute': buttons_container.data('id-product-attribute'),
'type': $(this).val()
};
let url = buttons_container.data('popup-url');
$.post(url, data, null, 'json').then(function (resp) {
$('body').append(resp.askbid_popup);
let productModal = $(`#bidask-modal-${resp.product.id}-${resp.product.id_product_attribute}`);
productModal.modal('show');
productConfig(productModal);
productModal.on('hidden.bs.modal', function () {
productModal.remove();
});
}).fail((resp) => {
prestashop.emit('handleError', {eventType: 'clickQuickView', resp: resp});
});
return false;
});
$('body').delegate('#continue_place_askbid', 'click', function(e){
let type = $(this).val();
let price = $(this).parent().find('#askbid_price_input').val();
let data = {
'action':'askBidControl',
'type': type,
'price': price
};
let url = $(this).closest('.quickview').data('popup-url');
console.log(url);
console.log('trafalet');
$.ajax({
url: url,
data: data,
success: function(resp){
console.log('trafaleteeeee');
},
error: function(err){
console.log(err);
}
});
return false;
});
productPopUp.tpl位于views / templates / front /
中我不确切知道如何使第二个ajax调用工作。它只是给出404错误。
更新:似乎它甚至没有通过第二个ajax请求(askBidController)上的Auction.php的initContent函数,它有2个调用,一个用于我在ajax中的url,返回302找到,另一次调用index.php?controller = 404。
答案 0 :(得分:1)
PrestaShop控制器的ajax方法需要精确的语法(使用action param调用):
<ivysettings>
<include file="ivysettings.xml"/>
<resolvers>
<chain name="mychain" >
<resolver ref="myresolver"/>
<!-- Add more resolvers to your original chain -->
</chain>
</resolvers>
</ivysettings>
+ myCustomAction
在你的情况下:
displayAjax
应该工作;)
<强>注意:强>
模块控制器应该扩展public function displayAjaxAskBidControl(){}
类,而不是其他控制器。
在第一个ajax调用的情况下,你将id_product作为参数,所以父控制器执行ModuleFrontController
方法,在第二次调用中,productController没有找到id_product,因此重定向< / p>