2017-04-09 48 views
1

我一直试图使用ajax从php调用saveTaskDB函数。它将作为成功返回,但数据库不会更新。我试过创建一个'create.php',其中只有saveTaskDB函数代码,当我直接调用这个文件时,它会成功返回,并且会更新我的数据库。我不知道为什么我不能在我的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

在'taskLogger.js'什么是你把'dateType的期望:“dataString''在POST? –

+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.php将返回 TRUEFALSE

tasklog.php正在返回的JavaScript alert()

这些是不同类型的。您的调用脚本tasklogger.js不会对响应做任何事情。

  • 我希望你擦洗你的数据!*

在PHP中触发任意函数,你可以评估你在JavaScript请求中指定的一些参数。我们称之为变量... action

在PHP中,您现在可以评估行动...

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

Im对不起,这是我的第一篇文章在stackoverflow。是的,我只想要一个基本的ajax脚本来调用“特定的”php函数。我只是在'tasklog.php'中使用'alert()'来查看我的代码是否通过了。 –

+0

非常感谢!现在我可以使用ajax调用saveTaskDB,但是现在我的ajax不会触发我的'成功:function(data){}'我该如何解决这个问题? –