我一直在尝试使用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();
}
答案 0 :(得分:0)
我不确定这个问题有多深。您可能需要查看JavaScript和PHP之间的关系,或基本的Web服务设计模式。我这样说是因为我不知道你的目标是什么。如果你想要一个触发功能的基本脚本,那么有数以千计的方法可以做到这一点。
dataType:
可以是default: Intelligent Guess (xml, json, script, or html)
您的create.php
正在返回
TRUE
和FALSE
您的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 */
}