Prestashop获取ajax响应显示为null

时间:2015-05-11 07:05:23

标签: php ajax prestashop prestashop-1.6

在prestashop中,我正在做一个小模块。在那个聪明的模块中,我有一个表格。我想使用ajax提交这些值。所以为此,我把我的ajax作为$ .post就像这样

jQuery(document).ready(function($) {
  $('.module-form').submit(function(e) {
    e.preventDefault();
      msg = '';
    $form = $(this);
      $.post(
        baseDir + "modules/mymodule/mymodule.php",
        { name: 'myname', action: 'form_subscribe' }, 
        function(data) {
          var response = jQuery.parseJSON(data);
          console.log(response);
        }
      );
  return false;
  });
});

在模块文件(mymodule.php)中,我有这样的代码

class MyModule extends Module {
    public function __construct() {
    -----
    ----
    --
    }

    function form_subscribe() {
      $name = $_POST['name'];
      echo json_encode($name);
      exit;
    }
}

但是当我提交表单时,它会将响应显示为null。有人能告诉我如何解决这个问题吗?任何帮助和建议都会非常明显。感谢。

1 个答案:

答案 0 :(得分:0)

您无法直接访问类或方法,就像您尝试的那样。 要执行操作,您必须首先实例化Class,然后调用该函数。 特别是在prestashop环境中,请执行以下步骤: 在你的模块文件夹中创建另一个php页面,让我们调用页面mymodule_ajax.php。 然后在其中检索配置,初始化prestashop上下文,然后实例化模块并执行呼叫管理。

mymodule_ajax.php:

include(dirname(__FILE__). '/../../config/config.inc.php');
include(dirname(__FILE__). '/../../init.php');

/* will include module file */
include(dirname(__FILE__). '/mymodule.php');

/* will instantiate the class MyModule so that you can access the method */
$my_mod = new MyModule;

/* using Prestashop Tools Class we ensure that the call is made from the form with action "form_subscribe */    
if(Tools::isSubmit('action') && Tools::getValue('action') == 'form_subscribe')
            $my_mod->form_subscribe(); //call the method 

然后更改您的ajax代码以指向该URL:

  $.post(
    baseDir + "modules/mymodule/mymodule_ajax.php", //new url
    { name: 'myname', action: 'form_subscribe' }

您现在应该在console.log中检索json值。