2017-04-09 18 views
1

私は、ajaxを使ってPHPからsaveTaskDB関数を呼び出そうとしています。それは成功として返されますが、データベースは更新されません。私はそれにsaveTaskDBファンクションコードを持つ'create.php'を作成しようとしました。ファイルを「直接」と呼ぶと、成功として返され、さらにデータベースが更新されます。なぜ私は私のPHPで特定の関数を呼び出すことができないと私はまた、どのように私のPHP関数を単一のPHPファイルに格納し、AJAXを介して呼び出すことを知りたいのか分からない。私を助けることができる誰かに感謝します。ajaxを使って特定のphp関数を呼び出せません

私はこの

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

:POST中に」dataString''を? –

+0

'dateType: 'dataString'とは何ですか? –

+0

私はまだphpとajaxには新しいです。私は 'dataType:json'をデータ型として使ってみましたが、有効なjsonを内部に渡しましたが、データベースは更新されません。オンラインでフォーラムを読むと、私は 'dataType:dataString'を見つけました。魔法のように私のクエリは 'create.php'を直接呼び出していましたがtasklog.phpではなく、 –

答えて

0

私はわかりませんどのくらい深くこの質問に行く。 JavaScriptとPHPの関係、または基本的なWebサービスの設計パターンを確認する必要があるかもしれません。あなたの大きな目標が何であるか分からないので、私はこれを言う。関数をトリガする基本的なスクリプトが必要な場合は、それを行う方法が何千もあります。

dataType:default: Intelligent Guess (xml, json, script, or html)

あなたcreate.phpTRUEFALSE

を返すことができますあなたのtasklog.phpこれらは、異なるタイプのJavaScriptのalert()

を返しています。あなたの呼び出しスクリプトtasklogger.jsは応答で何もしません。私はあなたのデータをスクラブ願っています!*

PHPで任意の関数をトリガするには

  • 、あなたがJavaScriptのリクエストで指定したいくつかのパラメータを評価することができます。変数actionを呼び出してみましょう。

    PHPでは、あなたが今行動のために評価することができます... `taskLogger.js`は` DATETYPE合格のあなたの期待するものであるに

    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 */ 
    } 
    

+0

私は混乱して申し訳ありませんが、これは私の最初の投稿です。はい、私はちょうど基本的なajaxスクリプトが '特定の' PHP関数を呼び出すようにします。私は 'tasklog.php'で' alert() 'を使って自分のコードがそこを通過するかどうかを調べています。 –

+0

大変ありがとうございます!今私はsaveTaskDBをajaxを使って呼び出すことができますが、今私のajaxは私の 'success:function(data){}'をトリガーしません。 –

関連する問題