2014-08-31 103 views
4

我開始用PHP進行web開發,並且正在測試jQuery ajax調用一個php文件來運行函數。但我注意到,每次我用AJAX POST方法調用它時,php文件都會加載到資源中。預防這種情況的最佳解決方案是什麼?另外,是否有更好的編碼實踐,使用從php中的單個文件執行多個函數調用(我習慣於在c#世界中調用web服務或web方法)?與AJAX一起使用php文件的最佳做法

test.php的

<?php 
    if($_POST['action']=='test'){ 
     $arr = array(
      'stack'=>'overflow', 
      'key'=>'value' 
     ); 
     echo json_encode($arr); 
    } 
?> 

scripts.js中

function postTest(){ 
    var data = { 
     action: 'test' 
    }; 
    $.ajax({ 
     type: "POST", 
     url: "test.php", 
     dataType: 'json', 
     data: data, 
     success: function(result){ 
      console.log(result) 
     } 
    }); 
} 

更新: 我改變了我的代碼使用的數據變量作爲Ajax調用的對象。然而,原來的問題仍然存在。如何在php文件中使用函數,而不會將其加載到瀏覽器中的每個Ajax調用的站點資源中?

謝謝。

+3

不要使用'JSON.stringify'上的數據,但傳遞對象直接... jQuery將採取的護理休息。 – CBroe 2014-08-31 21:01:56

+0

我不明白你的意思是多個函數調用。 – zsawaf 2014-08-31 21:16:41

+0

我錯了,因爲我應該使用一個PHP文件來存儲幾個服務器端函數(如網絡方法)?這是我想要做的。使用JavaScript處理事件前端將數據傳遞給服務器端功能。 – 2014-08-31 22:44:26

回答

0

如果你注意到php塊永遠不會被執行,那麼你傳遞的數據是錯誤的。試試這個:

function postTest(){ 
    var data = { 
    'action': 'test' 
    }; 
    $.ajax({ 
    type: "POST", 
    url: "test.php", 
    dataType: 'json', 
    data: data, 
    success: function(result){ 
     console.log(result) 
    } 
    }); 
} 
+0

另外,請注意我將動作轉換爲json中的字符串。 – zsawaf 2014-08-31 21:14:52

+0

作者:json你的意思是對象,它的唯一必要,如果屬性名稱是保留字 – andrew 2014-08-31 21:16:21

+0

@andrew我的意思是對象'數據'。我只是認爲避免混淆是一種很好的做法,因爲他可能會在之前的其他地方定義行動。 – zsawaf 2014-08-31 21:18:19

0

JSON.stringify對你不利,在這裏。

爲了證明這一點,你可以把print_r($_POST)放在你的php腳本中,看看console.log(result)給你什麼。

爲了解決這個問題,你可以簡單地把你的數據在$.ajax()塊:

function postTest(){ 
    $.ajax({ 
     type: "POST", 
     url: "test.php", 
     dataType: 'json', 
     data: { 
      action: 'test' 
     }, 
     success: function(result){ 
      console.log(result) 
     } 
    }); 
}