2012-04-20 22 views
1

我完全不熟悉jQuery和Ajax,但我已經學會了如何做Hello World,填充選擇標籤等等...... 問題是,我不'不喜歡使用結構化PHP。我學到的方法是用$ .getJSON調用一些PHP文件,並且該文件必須「回顯」我的結果。 我想要的是能夠調用一個實際上是帶有某些方法的類的PHP文件,並且該方法的返回值將是JavaScript將接收的內容而不僅僅是回顯結果。使用jQuery訪問PHP方法

感謝您的關注。

Ps .:我有很多使用Amfphp的PHP-OOP和Flex + PHP的經驗。我試圖構建不同版本的視圖,我想重新使用Flex已經使用的類。

+0

注意安全隱患:防止JavaScript(通過Jonathan Sampson接受的答案中的某些代碼訪問PHP)能夠訪問不需要的方法。 – koen 2012-04-28 17:34:50

回答

5

jQuery在您的計算機上運行,​​並且PHP在服務器上運行。 PHP和jQuery只能通過一系列精心設計的字符串進行通信。在服務器上,您可以自由創建對象,運行方法,處理輸出以及其他任何內容。但是,如果您要將這些數據反饋回您的jQuery應用程序(仍在客戶機上運行),則需要回顯(或輸出)PHP腳本的結果。

您可以考慮這樣的事情:

$.post('server.php', { 'class':'foo', 'method':'bar' }, function(response) { 
    /* do something with the output of $foo->bar(); */ 
}); 

正如你可以在這裏看到,我可以定義我想的類和方法都要求在服務器上。從server.php開始,我們將看看$_POST['class']$_POST['method']來確定我們將要實例化的內容以及我們將運行哪些方法。

+0

因此,無論哪種方式,我將不得不使用Structural PHP來使用jQuery,對吧? – 2012-04-20 14:59:52

+1

@MarcoAurélioDeleu您不受限制使用課程。你只需要輸出一些東西。你可以從對象內部做到這一點,或不。 – Sampson 2012-04-20 15:00:25

1

AMF與HTTP不同,它們是不同的協議。

當使用AJAX(jQuery或不)時,您在URI上調用HTTP方法,而不是OOP方法。因此,所有內容至少在兩個映射中結束:

  • 將您的應用程序邏輯映射到方法和URI。
  • 您的Javascript代碼映射到方法和URI。

下面是使用Respect\Rest一個樣本:

$router->get('/users/*', function($userName) { 
    return MyDatabaseLayer::fetchUser($userName); //Illustrative 
})->accept(
    'application/json' => function($data) { 
     header('Content-type: application/json'); 
     return json_encode($data); 
    } 
); 

現在jQuery的部分:

$.getJSON('/users/alganet', function(user) { 
    alert(user.name); 
}); 

您應該使用不同的操作相應的HTTP方法。保存的用戶會是這樣的:

$router->post('/users/*', function($userName) { 
    return MyDatabaseLayer::saveUser($_POST['user']); //Illustrative 
}); 

的jQuery:

$.post('/users', $("$userform").serialize()); 

主要有四種HTTP方法:GET,POST,PUT和DELETE。 GET和POST是最常見的。

有一個很好的瑣事:HTTP,REST和AMF都是由同一個人寫的:Roy Fielding。

+1

woa ...極端javascriptified php ....但這個答案的基本是重要的。這不是jQuery和PHP的問題,必須一起工作,而是通過http(s)傳輸數據的問題。 jQuery不知道服務器上有一個PHP腳本,PHP腳本不知道它傳遞給一個打開的Ajax連接。 PHP腳本被請求調用,進行一些計算並提供(HTML/JSON/whatever)字符串。腳本的內部工作完全取決於你,狡猾的程序員 – cypherabe 2012-04-20 15:19:25

+0

快速的問題,也許你可以幫助我避免創建另一個堆棧問題:怎麼樣的jQuery使AMF調用?可能嗎?也許通過jQuery和AMFPHP之間的網關,我可以從jQuery創建一個HTTP Post到「Some_HTTP_To_AMF_Gateway」,然後這個網關將轉換這個調用。由於我已經在服務器上,所以調用會在本地,我可以使用Flex + PHP已有的所有功能。 – 2012-04-20 15:23:49

+0

我相信這是可能的,但我從來沒有測試過這樣的東西。考慮到AS3與JavaScript相似,從某處移植它可能比預期的更容易。 – alganet 2012-04-20 15:33:23