无法使用ajax调用特定的php函数

时间:2017-04-09 02:55:35

标签: php jquery ajax

我一直在尝试使用ajax从php调用saveTaskDB函数。它将返回成功但数据库不会更新。我尝试使用'create.php'函数代码创建saveTaskDB,当我直接调用文件时,它会返回成功加上它将更新我的数据库。我不知道为什么我不能在我的php中调用特定的函数,我也想知道如何将我的php函数存储到单个php文件并通过AJAX调用它们。感谢任何可以帮助我的人。

我的代码是这样的

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();
}

1 个答案:

答案 0 :(得分: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 */
}

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 */ }