【问题标题】:Cannot call specific php function using ajax无法使用ajax调用特定的php函数
【发布时间】:2017-04-09 02:55:34
【问题描述】:

我一直在尝试使用 ajax 从 php 调用 saveTaskDB 函数。它将成功返回,但数据库未更新。我尝试使用其中的 saveTaskDB 函数代码创建一个 'create.php',当我“直接”调用该文件时,它返回成功并且它会更新我的数据库。我不知道为什么我不能在我的 php 中调用特定函数,我也想知道如何将我的 php 函数存储到单个 php 文件中并通过 AJAX 调用它们。感谢任何可以帮助我的人。

我有这样的代码

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

创建.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();
}

【问题讨论】:

  • taskLogger.js 中你对通过dateType: 'dataString' 在POST 中的期望是什么?
  • dateType: 'dataString', 是什么?
  • 我还是 php 和 ajax 的新手。我尝试使用dataType: json 作为数据类型并在内部传递一个有效的json,但它不会更新我的数据库。当我在线阅读论坛时,我遇到了dataType: dataString 并且神奇地我的查询运行直接调用'create.php'而不是tasklog.php
  • 抱歉给您带来了困惑。我尝试删除dataType: 'dataString' ,当我直接调用'create.php'时它仍然有效。但我现在想做的是从 tasklog.php 调用saveTaskDB () 函数。
  • 您已将其从问题中删除 - 但至少您是否尝试使用 dataType 而不是 dateType 对其进行测试?

标签: php jquery ajax


【解决方案1】:

我不确定这个问题有多深。您可能需要查看 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 */
}

【讨论】:

  • 抱歉,这是我在 stackoverflow 中的第一篇文章。是的,我只想要一个基本的 ajax 脚本来调用“特定”的 php 函数。我只是在tasklog.php 中使用alert() 来查看我的代码是否通过那里。
  • 非常感谢!现在我可以使用 ajax 调用我的 saveTaskDB 但现在我的 ajax 不会触发我的 success: function(data){ } 我该如何解决这个问题?
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2011-05-08
  • 2011-01-17
相关资源
最近更新 更多