AJAX没有输出正确的东西

时间:2017-08-22 21:54:36

标签: javascript php mysql ajax

所以我试图从javascript调用php方法,这样我就可以查询数据库并将结果输入到我的js功能中。目前,我的ajax中的'console.log(output)只是输出:

"array (size=1)
'action' => string 'getResults' (length=10)'"

不确定为什么要这样做,它应该返回查询结果,这只是数据库中的一个条目。任何人都有任何想法?欢迎任何帮助!感谢。

我的Javascript文件的一部分

function callPHP() {
    $.ajax ({

        type: "GET",
        datatype: "application/json",
        url: "BaseClass.php",
        data: { action : 'getResults' },
        //error: function(err){console.log(err)},
        success: function(output) {

            console.log(output);
            //alert(output);
        }
        //error, function(err){console.log(err)}
    });


}

callPHP();  

BaseClass.php:

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    require("Conn.php");
    require("MySQLDao.php");

    $param=$_REQUEST['action'];

    echo var_dump($_GET);
    /*
    $handle = fopen("php://input", "rb");
    $param = '';
    while (!feof($handle)) {
        $param .= fread($handle, 8192);
    }
    fclose($handle);
    */

    if (empty($param))
    {
        $returnValue["status"] = false;
        $returnValue["title"] = "Error";
        $returnValue["message"] = "No Data Recieved paige" .$param ."...";
        echo json_encode($returnValue);
        return;
    }
    else
    {
        $dao = new MySQLDao();
        if ($dao->openConnection() == false)
        {
            $returnValue["status"] = false;
            $returnValue["title"] = "Error";
            $returnValue["message"] = "Connection Could Not Be Established Between Server And Database";
            echo json_encode($returnValue);
        }
        else
        {
            //Decodes data, dont change
            $body = json_decode($param, true);
            $recieved = $body["data"];

            //Gets the result of a query
            //$result = $dao->MySQLDaoMethodName(parameters);

            //Return the result of the query
            //echo json_encode($result);
        }
        $dao->closeConnection();
        return;
    }
?>

Conn.php - 这是所有连接信息,*出于保密原因* *

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    class Conn
    {
        public static $dbhost = "***";
        public static $dbname = "***";
        public static $dbuser = "***";
        public static $dbpass = "***";
    }
?>

MySQLDao.php - 此文件包含查询

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    //Class for holding queries
    class MySQLDao
    {
        var $dbhost = null;
        var $dbuser = null;
        var $dbpass = null;
        var $mysqli = null;
        var $dbname = null;
        var $result = null;


        //constructor
        function __construct()
        {
            $this->dbhost = Conn::$dbhost;
            $this->dbuser = Conn::$dbuser;
            $this->dbpass = Conn::$dbpass;
            $this->dbname = Conn::$dbname;
        }

        //Attempt a connection to the database
        public function openConnection()
        {   

            //Try and connect to the database
            $this->mysqli = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
            //If the connection threw an error, report it
            if (mysqli_connect_errno())
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        //Get method for retrieving the database conection
        public function getConnection()
        {
            return $this->mysqli;
        }

        //Close the connection to the database
        public function closeConnection()
        {
            //If there is a connection to the database then close it
            if ($this->mysqli != null)
                $this->mysqli->close();
        }

        //-----------------------------------QUERY METHODS-------------------------------------

        public function getResults($data)
        {

            $sql = "SELECT room.room_description FROM room WHERE room.room_id = 1";

            $result = $this->mysqli->query($sql);


            //if (mysql_num_rows($result) == 1) {
            //  $obj = mysql_fetch_object($result, 'obResults');

            //}

            echo json_encode($result);

            echo($result);

        }

    }
?>

2 个答案:

答案 0 :(得分:0)

我认为你误解了如何在javscript和php之间发送数据。

  1. 如果你想发送一个对象或一组数据,你的javascript应该用$ .post()发布。
  2. 你的php将从javascript收到json。你需要在它上面使用php的json_decode函数才能使它对php有用。
  3. 如果您希望php脚本的输出对javascript有用,则需要使用php的json_encode函数对其进行编码,然后再将其返回到调用脚本。
  4. http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:0)

输出是echo var_dump($_GET);我确定。我可以告诉我,因为输出格式是var_dump类型。并且代码的成功部分没有任何输出。我的意思是在这部分else { //Decodes data, dont change ...中输出已被注释掉。

我注意到你正在使用MySqli,但有些方法是MySql api,就像这部分代码一样

//if (mysql_num_rows($result) == 1) {
       //  $obj = mysql_fetch_object($result, 'obResults');

//}

我认为这段代码不完整,处于调试阶段,因为我可以看到许多不完整的方法和函数调用。

同时尝试使用预备持有人的准备好的陈述来保障安全。

在API输出之前使用ob_clean()是一个好习惯,因为任何额外的字符都会破坏输出数据和格式。但是,您不会看到错误。有一些有用的API测试工具,如Browsers Rest Client扩展。调试的最佳方法是调试工具和框架,如x-debug。

对您的代码进行以下更改。希望这有帮助!

<强> BaseClass.php:

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    require("Conn.php");
    require("MySQLDao.php");

    $param=$_REQUEST['action'];

    // echo var_dump($_GET);
    /*
    $handle = fopen("php://input", "rb");
    $param = '';
    while (!feof($handle)) {
        $param .= fread($handle, 8192);
    }
    fclose($handle);
    */

    if (empty($param))
    {
        $returnValue["status"] = false;
        $returnValue["title"] = "Error";
        $returnValue["message"] = "No Data Recieved paige" .$param ."...";
        ob_clean();
        echo json_encode($returnValue);
        exit();
    }
    else
    {
        $dao = new MySQLDao();
        if ($dao->openConnection() == false)
        {
            $returnValue["status"] = false;
            $returnValue["title"] = "Error";
            $returnValue["message"] = "Connection Could Not Be Established Between Server And Database";

            //Clean up before output
            ob_clean();
            echo json_encode($returnValue);
            exit();
        }
        else
        {
            //Decodes data, dont change
            $body = json_decode($param, true);
            $recieved = $body["data"];

            //Gets the result of a query
            $result = $dao->getResults($recieved);
            //Close connection as fast as possible
            $dao->closeConnection();

            //Return the result of the query
            ob_clean();
            echo json_encode($result);
            exit();
        }
    }
?>

<强> MySQLDao.php

<?php

    error_reporting(E_ALL); ini_set('display_errors', 1);

    //Class for holding queries
    class MySQLDao
    {
        var $dbhost = null;
        var $dbuser = null;
        var $dbpass = null;
        var $mysqli = null;
        var $dbname = null;
        var $result = null;


        //constructor
        function __construct()
        {
            $this->dbhost = Conn::$dbhost;
            $this->dbuser = Conn::$dbuser;
            $this->dbpass = Conn::$dbpass;
            $this->dbname = Conn::$dbname;
        }

        //Attempt a connection to the database
        public function openConnection()
        {   

            //Try and connect to the database
            $this->mysqli = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
            //If the connection threw an error, report it
            if (mysqli_connect_errno())
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        //Get method for retrieving the database conection
        public function getConnection()
        {
            return $this->mysqli;
        }

        //Close the connection to the database
        public function closeConnection()
        {
            //If there is a connection to the database then close it
            if ($this->mysqli != null)
                $this->mysqli->close();
        }

        //-----------------------------------QUERY METHODS-------------------------------------

        public function getResults($data)
        {

            $sql = "SELECT room.room_description FROM room WHERE room.room_id = ?";

            $stsm = $this->mysqli->prepare($sql);
            $stsm->bind_param('i',1);
            $result = $stmt->execute();

            if (mysqli_num_rows($result) == 1) {
              $obj = mysqli_fetch_object($result, 'obResults');
              return $obj;
            }

            return false;
        }

    }
?>