2015-05-11 15 views
0

在prestashop中,我正在做一個小模塊。在smarty模塊中,我有一個表單。我想用ajax提交這些值。所以,對於我已經作出了阿賈克斯$。員額這樣Prestashop獲取顯示爲空的ajax響應

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; 
    } 
} 

但是當我做了提交形式顯示響應爲空。有人能告訴我如何解決這個問題嗎?任何幫助和建議都將非常可觀。謝謝。

+0

你只是向一個類發出請求,它不回答任何問題,這就是爲什麼響應爲空 – xNeyte

+0

那麼你能告訴我如何獲得類內的值並使用它嗎?任何更好的方法? – NewUser

+0

您的ajax請求必須鏈接到PHP腳本,您可以使用您的MyModule功能 – xNeyte

回答

0

您不能直接訪問類或方法,就像您正在嘗試的那樣。 要執行您的操作,您必須首先實例化該類,然後調用該函數。 特別是在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代碼指向該網址這樣:

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

您現在應該找回你的console.log的JSON值。