2017-06-11 184 views
0

我正在通過AJAX調用PHP的一個站點,現在AJAX使用POST從PHP獲取一個回顯的字符串,然後在開關中比較它,然後執行所需的操作。下面從PHP調用JS函數

function submitPHP(dataForPHP){ 
    //Runs ajax request 
    $.ajax({ 
     type : "POST", 
     url : 'initPHP.php', 
     dataType : 'text', 
     data : dataForPHP, 
     success : function(data){ 
      //Checks echoed data from PHP 
      switch(data){ 
       case "LOGIN_ACCEPTED": 
        loggedInFunction(); 
        break; 
       case "LOGIN_FAILED": 
        loggedInFailedFunction(); 
        break; 
      } 
     } 
    }); 
} 

我想,如果沒有爲PHP返回什麼功能的方式代碼示例(如「loggedInFunction();」)我想調用,而不是一個字符串,然後我不得不比較然後調用函數?我可以改變AJAX來使用JSON,而不是它。

我一直在尋找其他類似的問題在這裏堆棧上大多數人想回聲一個完整的功能,這是不是我想要做的。

在此先感謝!

+0

我認爲你想要做的是JSONP:https://stackoverflow.com/a/3840118/4949918 – Axnyff

+0

我認爲[this](https://stackoverflow.com/questions/912596/how-to-turn-a-string-into-a-javascript-function-call)可能就是你正在尋找的東西。我覺得有點奇怪,你想要緊密結合後端和前端,但這是可能的。最後一句忠告:不要沿着'eval'路線走。有龍。 –

+4

你不想做什麼,你想做什麼。甚至不知道JS中要調用哪個函數,也不是說JS的buisness告訴PHP這些函數使用。保持它們分開,並使用一個接口來實現兩端之間的通信,否則最終必須調試PHP,因爲您已經在JS中更改了某些內容,反之亦然 – Thomas

回答

0

我會這樣做。

  1. 使用HTTPS進行登錄,HTTP現在真的不安全;
  2. 創建具有所有允許方法(動作)一個控制器對象;
  3. 致電動作控制器

控制器的想法是在幾個層次上方便:

  • 安全性:如果一個方法是不是在控制器你不能調用它,所以它是知道的方式可以調用什麼,什麼是絕對不可能調用的;
  • 凝聚力:方法是彼此相鄰,更容易維護;
  • 封裝:如果有任何狀態,它可以容易地在該對象的上下文中保存。

這是一個例子:

loginController = { 
    "acceptAction": function() { 
    }, 
    "failAction": function() { 
    } 
}; 

現在,您甚至可以從AJAX處理的方法。說服務器告訴你你必須做什麼。 A 動詞可以這麼說,如acceptfail。你可以這樣做:

"success": function (data) { 
    loginController[data + "Action"](); 
} 

就是這樣。

順便說一句:這只是非常基本的MVC模式。老人,但金傑:)