用于检索postgres数据的AJAX函数不起作用

时间:2017-12-29 12:55:34

标签: javascript php jquery ajax postgresql

我有一个简单的AJAX函数绑定到一个应该执行PostgreSQL查询的按钮。但是,当我单击我将ajax查询绑定到的按钮时,我得到的是数据库连接成功的确认。 ajax结果似乎没有发生任何事情(应该在handleAjax()函数中打印到控制台。我做错了什么?

这是javascript代码(使用jquery):

$(document).ready(function() {

    function sendAjax() {

        $.ajax({
            url: "db/database.php",
            success: function (result) {
                handleAjax(result);
            }
        });
    }

    function handleAjax(result) {
        console.log(result);
    }

    $("#submit-button").on("click", sendAjax);

});

这就是database.php的内容:

    <?php

    function dbconn(){

        ini_set('display_errors', 1); // Displays errors

        //database login info
        $host = 'localhost';
        $port = 5432;
        $dbname = 'sms';
        $user = 'postgres';
        $password = 'postgres';
        // establish connection
        $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
        if (!$conn) {
            echo "Not connected : " . pg_error();
            exit;
        } else {
            echo "Connected.";
        }
    }

    $conn = dbconn();
    $sql = "SELECT * FROM numbers;";

    $result = pg_query( $sql ) or die('Query Failed: ' .pg_last_error());
    $count = 0;
    $text = 'error';
    while( $row = pg_fetch_array( $result, null, PGSQL_ASSOC ) ) {
        $text = $row['message'];
        //echo $text;
    }
    pg_free_result( $result );

?>

3 个答案:

答案 0 :(得分:1)

问题出在database.php文件中,你得到的只是“已连接”。因为你最后不打印你的结果。 Ajax只接收php文件的输出。

所以在你的php文件的末尾你应该添加:

echo $text;

您还应删除echo "Connected.";

答案 1 :(得分:1)

AJAX不是一种神奇的魔杖,它以神奇的方式读取PHP代码。假设AJAX是一个用户。那么用户做了什么。

  1. 打开网页
  2. 等到PHP执行代码并显示数据
  3. 告诉你他所看到的内容
  4. 如果你没有显示任何东西,ajax不能告诉你他看到了什么。

    在这个地方值得一提的是,PHP和AJAX之间进行通信的最佳方式是使用JSON格式。

    您的代码通常都很好。您所要做的就是显示您的数据。您的所有数据都在$text var中。因此,让我们将您的数组($text)转换为JSON。

    header('Content-Type: application/json');
    echo json_encode($text);
    

    首先你将content-type设置为json,所以ajax知道他读了json。然后将PHP数组编码(转换)为js友好格式(JSON)。同时删除不必要的回声,如'Conntected',因为正如我所说,AJAX会读取他所看到的一切。

答案 2 :(得分:0)

你应该从dbconn()

返回$ conn
 if (!$conn) {
        echo "Not connected : " . pg_error();
        exit;
    } else {
        echo "Connected.";
        return $conn;
    }