2017-04-09 26 views
1

我一直試圖使用ajax從php調用saveTaskDB函數。它將作爲成功返回,但數據庫不會更新。我試過創建一個'create.php',其中只有saveTaskDB函數代碼,當我直接調用這個文件時,它會成功返回,並且會更新我的數據庫。我不知道爲什麼我不能在我的php中調用特定的函數,我也想知道如何將我的php函數存儲到單個php文件中並通過AJAX調用它們。感謝任何能夠幫助我的人。使用ajax無法調用特定的php函數

我有我的代碼是這樣

tasklogger.js:

function saveTask(){ 
    $.ajax({ 
     method: "POST", 
     url:"../_tasklogger/classes/tasklog.php", //the page containing php script 
     data:{ action: 'add', 
       date: $("#date").val(), 
       taskName: $("#taskName").val(), 
       taskType: $("#taskType").val(), 
       duration: $("#duration").val(), 
       startTime: $("#startTime").val(), 
       endTime: $("#endTime").val() 
      }, 
     success: function(data){ 
      goSuccess(); 
     } 
    }); 
} 

tasklog.php

require_once 'dbconfig.php'; 

if (isset($_POST['action']) && !empty($_POST['action'])){ 
    $date= $_POST['date']; 
    $taskName= $_POST['taskName']; 
    $taskType= $_POST['taskType']; 
    $duration= $_POST['duration']; 
    $startTime= $_POST['startTime']; 
    $endTime= $_POST['endTime']; 
    saveTaskDB($date, $taskName, $taskType, $duration, $startTime, $endTime); 
} 

function saveTaskDB($date, $taskName, $taskType, $duration, $startTime, $endTime){ 
try{ 
    $stmt = $db_con->prepare("INSERT INTO tasks (TaskDate,TaskName,TaskType,Duration,StartTime,EndTime) VALUES(:tdate, :tname, :ttype, :dur, :stime, :etime)"); 
    $stmt->bindParam(":tdate", $date); 
    $stmt->bindParam(":tname", $taskName); 
    $stmt->bindParam(":ttype", $taskType); 
    $stmt->bindParam(":dur", $duration); 
    $stmt->bindParam(":stime", $startTime); 
    $stmt->bindParam(":etime", $endTime); 

    if($stmt->execute()){ 
     echo 'alert("success")'; 
    }else{ 
     echo 'alert("wrong")'; 
    } 
} 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
    } 
} 

create.php

require 'dbconfig.php'; 

$date= $_POST['date']; 
$taskName= $_POST['taskName']; 
$taskType= $_POST['taskType']; 
$duration= $_POST['duration']; 
$startTime= $_POST['startTime']; 
$endTime= $_POST['endTime']; 

try{ 
    $stmt = $db_con->prepare("INSERT INTO tasks (TaskDate,TaskName,TaskType,Duration,StartTime,EndTime) VALUES(:tdate, :tname, :ttype, :dur, :stime, :etime)"); 
    $stmt->bindParam(":tdate", $date); 
    $stmt->bindParam(":tname", $taskName); 
    $stmt->bindParam(":ttype", $taskType); 
    $stmt->bindParam(":dur", $duration); 
    $stmt->bindParam(":stime", $startTime); 
    $stmt->bindParam(":etime", $endTime); 

    if($stmt->execute()){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
+0

在'taskLogger.js'什麼是你把'dateType的期望:「dataString''在POST? –

+0

什麼是'dateType:'dataString','? –

+0

我對php和ajax還很陌生。我嘗試使用'dataType:json'作爲數據類型並傳入一個有效的json,但它不會更新我的數據庫。當我在線閱讀論壇時,我遇到了'dataType:dataString',神奇的是,我的查詢直接調用'create.php',但沒有tasklog.php –

回答

0

我不知道這個問題有多深。您可能需要查看JavaScript和PHP或基本Web服務設計模式之間的關係。我這樣說是因爲我不知道你的大局目標是什麼。如果你想要一個觸發函數的基本腳本,那麼有幾千種方法可以做到這一點。

dataType:可以default: Intelligent Guess (xml, json, script, or html)

create.php將返回 TRUEFALSE

tasklog.php正在返回的JavaScript alert()

這些是不同類型的。您的調用腳本tasklogger.js不會對響應做任何事情。

  • 我希望你擦洗你的數據!*

在PHP中觸發任意函數,你可以評估你在JavaScript請求中指定的一些參數。我們稱之爲變量... action

在PHP中,您現在可以評估行動...

if(empty($_POST['action'])){ 
return; 
} 
switch($_POST['action']){ 
    case "save": 
     $some_var = $_POST['somearg']; 
     $some_other = $_POST['another_arg']; 
     save($some_var, $some_other); 
     break; 
    case "delete": 
     /* .... some code .... */ 
     break; 

    case "update": 
     /* some code ... 
      notice there is no "break" here... and execution continues to the next case.... falls-thru */ 
    case "create": 
      /* some code */ 
      break; 
    default: 
     /* do something else */ 
} 

+0

Im對不起,這是我的第一篇文章在stackoverflow。是的,我只想要一個基本的ajax腳本來調用「特定的」php函數。我只是在'tasklog.php'中使用'alert()'來查看我的代碼是否通過了。 –

+0

非常感謝!現在我可以使用ajax調用saveTaskDB,但是現在我的ajax不會觸發我的'成功:function(data){}'我該如何解決這個問題? –