saveTask()
函数调用requestJSONAJAX
,但requestJSONAJAX
函数返回false
。即使我tasklog.php
上的查询成功,也会发生这种情况;它甚至更新我的数据库。我不知道我的错误来自哪里。是在我的tasklog.php
或JavaScript函数中,还是我使用return
错误?
function saveTask(){
if(requestJSONAJAX('add')){
goSuccess();
}else{
alert('error');
}
}
function requestJSONAJAX(action){
var newObj;
if(action == "add"){
newObj = { action: "add",
date: $("#date").val(),
taskName: $("#taskName").val(),
taskType: $("#taskType").val(),
duration: $("#duration").val(),
startTime: $("#startTime").val(),
endTime: $("#endTime").val()
}
}else if(action == "login"){
newObj = { action: "login",
username: $("#username").val(),
password: $("#password").val()
}
}
$.ajax({
method: "POST",
url:"../_tasklogger/classes/tasklog.php", //the page containing php script
dataType: 'json',
data: newObj,
success: function(data){
status = data;
if(status == "success"){
return true;
}else{
return false;
}
},
error: function (req, status, err) {
console.log('Something went wrong', status, err);
}
});
}
tasklog.php
<?php
require_once 'dbconfig.php';
if(empty($_POST['action'])){
return;
}
if(($_POST['action']) != "getData"){
$date= $_POST['date'];
$taskName= $_POST['taskName'];
$taskType= $_POST['taskType'];
$duration= $_POST['duration'];
$startTime= $_POST['startTime'];
$endTime= $_POST['endTime'];
}
switch($_POST['action']){
case "add":
$sql = "INSERT INTO tasks (taskDate,taskName,taskType,duration,startTime,endTime,userId) VALUES(:tdate, :tname, :ttype, :dur, :stime, :etime, 1)";
$stmt = $db_con->prepare($sql);
$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 json_encode("success");
}else{
echo json_encode("error");
}
break;
case "getData":
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 */
default:
return;
}
?>
答案 0 :(得分:1)
您不会从requestJSONAJAX
返回任何。您在success
来电中从$.ajax()
处理程序返回一个布尔值,但这无关紧要。这不会使包含的函数 $.ajax()
调用 - 即requestJSONAJAX
- 返回任何内容。
根据您的AJAX通话成功或失败,您似乎正在尝试从requestJSONAJAX
返回值。这是不可能的;这就是为什么它被称为&#34; AJAX&#34; (异步 JavaScript和XML)。 requestJSONAJAX
将(基本上)总是在AJAX调用之前完成。即使它没有先完成,它也没有等待AJAX调用,也无法判断调用是成功还是失败。
要捕获调用是否成功,您需要在某处设置标志(如全局变量)。更好的是,只需在success
处理程序中处理您想要执行的操作。不要担心返回值。