2017-04-13 4 views
1

saveTask()関数はrequestJSONAJAXを呼び出しますが、requestJSONAJAX関数はfalseを返します。これは私のtasklog.phpのクエリが成功したとしても発生します。それは私のデータベースを更新する。私はどこでエラーが発生したのかわかりません。それは私のtasklog.phpにあるのでしょうかJavaScriptの機能ですか、それともreturnを間違って使っていますか?なぜ私のajax関数はfalseを返しますか?

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

あなたはrequestJSONAJAXからを返しません。 $.ajax()コールでsuccessハンドラからブール値を返しますが、それは無関係です。これは、を含むの機能を$.ajax()と呼びます。—は、requestJSONAJAX —が返されます。

あなたのAJAXコールの成功または失敗に基づいてrequestJSONAJAXから値を返そうとしているようです。それ無理;それが「AJAX」と呼ばれる理由です(JavaScriptとXMLの非同期)。 requestJSONAJAXは(本質的に)AJAX呼び出しの前に常に終了します。最初に終了しない場合でも、AJAX呼び出しで待機しているわけではなく、呼び出しが成功したか失敗したかを示す方法がありません。

呼び出しが成功したかどうかをキャプチャするには、(グローバル変数のような)どこかにフラグを設定する必要があります。さらに良いことに、そのsuccessハンドラ内でやりたいことを何でも処理してください。値を返すことについて心配しないでください。

+1

私は参照してください。今私は私のajax関数が値を返さない理由を理解しています。有益な返答をいただきありがとうございます。特にAjaxを勉強し始めたばかりの方には大きな助けになります。ありがとう! –

関連する問題