2013-02-17 173 views
0

我想知道是否有任何好的做法,以Ajax的方式從Javascript類中調用方法。在javascript中調用php類函數(ajax)

這是我現在的「樣式」來執行它。

(類中的方法,這裏只是舉例)

PHP端:

<?php 

if(isset($_POST['action']) && $_POST['action'] != null) 
{ 
    extract($_POST); 

    if($action) 
    { 
     $ajaxCommand = new EleveUpdate(); 

     if(method_exists($ajaxCommand, $action)) 
     { 
      $reponse = call_user_func(array($ajaxCommand, $action),$_POST); 
      echo $reponse; 
      exit(0); 
     } 
     else 
     { 
      throw new Exception("Cette méthode n'existe pas"); 
     } 
    } 
} 
else 
{ 
    echo 'Cette action n\'est pas autorisée'; 
    return false; 
} 

class EleveUpdate 
{ 

    public function __construct() 
    { 

    } 

    public function testfunct($data) 
    { 
     echo $data['eleve']; 
    } 
} 

JavaScript端:

$(document).ready(function() { 
    $.ajax({ 
     url: 'eleveupdate.php', 
     type: 'POST', 
     data: { 
      action: "testfunct", 
      eleve: 1 
     }, 
     beforeSend: function() 
     { 
      loading(true); 
     }, 
     error: function() 
     { 
      console.log('error'); 
     }, 
     success: function(data) 
     { 
      loading(false); 
      console.log(data); 
     } 
    }); 
}); 

的問題是,isset $ _ POST總是在我的班級中,我很確定這不是正確的做法,我在這裏找到了幫助。

感謝您提前

西蒙

+0

你認爲應該發生什麼,而發生什麼呢?此外,嘗試將類聲明放在最前面。 – gd1 2013-02-17 22:01:45

+0

這個想法是有一個更「優雅」的方式來做到這一點。這種方法完美地工作,但是,我不知道我是否想要像這樣使用它。一切都按照我想要的方式返回,但我想要找到「良好實踐」的方式:) – Simon 2013-02-17 22:13:51

+0

我看到的唯一'問題'是有人可以從外部調用你的課程的任意方法。如果你的課程只包含「安全」方法,那就沒有問題了。而且,我不喜歡對$ _POST變量使用extract()。 – gd1 2013-02-17 22:17:43

回答

0

的問題是,這並不容易調用基於字符串請求範圍,namings。 您可以使用稱爲LAMBDA或匿名函數的東西。通過這種方式,您可以存儲附有LAMBDA的字符串數組。就像這樣:

<?php 
class EleveUpdate { 
    private $funcs = array(); 

    function __construct($which_function) { 
     $funcs['testfunct'] = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); 

     $funcs[$which_function]; 
    } 
} 
?> 

在這裏看到更多的信息:http://www.php.net/manual/en/function.create-function.php

你可能甚至不需要再類用這種方法,但只是顯示。