首先,我真的是新的'用PHP。
我正在修改prestashop模块Minic MailChimp,在开发了一些函数后,我试图调用'他们通过AJAX。
这就是我与PHP函数交互的方式......
$('#btn_exec_new_list').on('click', function(){
id_field = $('#id_field').val();
name_field = $('#name_field').val();
list_type = $('#list_type option:selected').val();
$.ajax({
type: 'POST',
url: "minicmailchimp.php",
data: {id_field : id_field, name_field : name_field, list_type : list_type, add_list : '1'},
dataType: 'json',
success: function(result){
alert(result);
}});
});
这是在PHP方面,考虑到这一切都在CLASS(MinicMailchimp)中
public function addList(){
$settings = array();
if(!empty($_POST['id_field']) || !empty($_POST['name_field']) || $_POST['list_type'] == 0){
$this->message = array('text' => $this->l('Fill all the fields.'), 'type' => 'error');
return;
}
$settings = array(
'list_number' => $_POST['list_sendy']+1,
'id_field' => $_POST['id_field'],
'name_field' => $_POST['name_field'],
'list_type' => $_POST['list_type']
);
$list_name = "MINIC_MAILCHIMP_LIST".$settings['list_number'];
Configuration::updateValue($list_name, serialize($settings));
}
这就是我所看到的我必须要调用的方式(这也与上面的函数包含在同一个类中)。问题是我在函数外部编写的任何代码都会引发语法错误。
if(isset($_POST['add_list'])){
addList();
$this->addList(); // Not sure which one use (I think it might be this one)
}
错误:
[PrestaShop]模块minicmailchimp中的致命错误: 语法错误,意外'如果' (T_IF),期待功能(T_FUNCTION)
我也尝试将它变成一个函数并在类外调用它,但它只是简单地无法工作,试图通过AJAX抛出并回显并打印它但根本没有答案。它甚至没有成为AJAX的成功部分。
class MinicMailchimp extends Module{
public function executeFunction(){
if(isset($_POST['add_list'])){
echo "response from php";
addList();
}
}
}
call_user_func("executeFunction");
我得出的结论是,我对课程知之甚少,而且我不能在函数外部编写PHP代码。但这可能是另一回事。
谢谢你,希望这是足够的信息,请记住这是我的第一篇文章。
答案 0 :(得分:0)
您需要创建一个ajax控制器,并通过ajax调用它。 ajax控制器只会将请求传递给模块的文件。创建文件/minicmailchimp/controllers/front/ajax.php。内容将是这样的:
class MinicMailchimpAjaxModuleFrontController extends ModuleFrontController
{
public function initContent()
{
if (Tools::getIsset('ajax')) {
die($this->module->ajaxCall());
}
}
}
然后在你的minicmailchimp.php文件中创建一个方法“ajaxCall”,然后执行:
public function ajaxCall()
{
if (Tools::getIsset('add_list')) {
// Whatever you need to do...
}
}
然后致电
$.ajax({url: pathToAjaxController, ...})
请记住在ajax请求中传递“ajax”,因此,数据:{ajax:true,...}