为什么我的ajax函数返回false?

时间:2017-04-13 02:44:10

标签: javascript php jquery ajax

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

?>

1 个答案:

答案 0 :(得分:1)

您不会从requestJSONAJAX返回任何。您在success来电中从$.ajax()处理程序返回一个布尔值,但这无关紧要。这不会使包含的函数 $.ajax()调用 - 即requestJSONAJAX - 返回任何内容。

根据您的AJAX通话成功或失败,您似乎正在尝试从requestJSONAJAX返回值。这是不可能的;这就是为什么它被称为&#34; AJAX&#34; (异步 JavaScript和XML)。 requestJSONAJAX将(基本上)总是在AJAX调用之前完成。即使它没有先完成,它也没有等待AJAX​​调用,也无法判断调用是成功还是失败。

要捕获调用是否成功,您需要在某处设置标志(如全局变量)。更好的是,只需在success处理程序中处理您想要执行的操作。不要担心返回值。