【发布时间】:2017-04-09 02:55:34
【问题描述】:
我一直在尝试使用 ajax 从 php 调用 saveTaskDB 函数。它将成功返回,但数据库未更新。我尝试使用其中的 saveTaskDB 函数代码创建一个 'create.php',当我“直接”调用该文件时,它返回成功并且它会更新我的数据库。我不知道为什么我不能在我的 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();
}
}
创建.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();
}
【问题讨论】:
-
在
taskLogger.js中你对通过dateType: 'dataString'在POST 中的期望是什么? -
dateType: 'dataString',是什么? -
我还是 php 和 ajax 的新手。我尝试使用
dataType: json作为数据类型并在内部传递一个有效的json,但它不会更新我的数据库。当我在线阅读论坛时,我遇到了dataType: dataString并且神奇地我的查询运行直接调用'create.php'而不是tasklog.php -
抱歉给您带来了困惑。我尝试删除
dataType: 'dataString',当我直接调用'create.php'时它仍然有效。但我现在想做的是从 tasklog.php 调用saveTaskDB ()函数。 -
您已将其从问题中删除 - 但至少您是否尝试使用
dataType而不是dateType对其进行测试?