1

我想做的是通过 ajax 和 php 调用一些数据库数据。但是ajax调用不起作用,我在网上找不到解决方案。

所以这是我的代码:

测试.php

<?php

include_once 'db_class.php';

$cat = $_GET['cat'];  

$dbconn = new dbconn('localhost', 'root', 'somepsw', 'blog');

 $dbconn->set_query("select * from posts where category = '".$cat."'");

 echo '<br/>'.$dbconn->query.'<br/>';

 $result = $dbconn->result;

 $num = $dbconn->num_results;

 $array = mysqli_fetch_assoc($result);

 echo json_encode($array);
?>

如果我在浏览器上输入该网址:http://127.0.0.1:82/blog/ws/test.php?cat=css

通过 jsonEncode 返回的数据是正确的,但是当我用 jquery 在 html 页面上加载它时,他无法读取数据。

测试.html

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script>
function ajaxCall() {

var css;

$.ajax({                                      
      url: 'test.php',
      type: "GET",     
      data: {cat: css},              
      dataType: 'json',    
      success: function(rows)         
      {

     alert(rows);

      },
      error: function() { alert("An error occurred."); }

    });

    }

    ajaxCall();

</script>
</head>
<body></body>
</html>

提前致谢。

4

2 回答 2

1

我刚刚使用 PDO 重写了 php 代码,现在应该更安全了。

数据库.php

<?php

$dbhost = "localhost";  

$dbuser = "root";

$dbpsw = "somepsw";    

$dbname= "blog"; 

try {

    @$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpsw);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);  
}

catch(PDOException $e) {

    echo "Connection failed, an error occured! Please contact server administrator."; //user friendly message
    getErrorsLog($e->getMessage());
 }

 function closeDbConn () {

    $dbh = null;

 }

 function getErrorsLog($message) {

    $file = 'dberrors.log';
    $date = date("d/m : H:i :");

    // Open the file to get existing content
    $current = file_get_contents($file);
    // Append a new error message to the file
    $current .= $date.$message;
    $current .= "\r\n";
    // Write the contents back to the file
    file_put_contents($file, $current);
    exit();

 }

?>

博客数据.php

<?php

include_once "db.php";

$tableName = "posts";
$data = array();
@$view = $_GET["view"];

if (isset($_GET["view"])) { 

    $stmt = $dbh->prepare("SELECT * FROM $tableName WHERE category =? ORDER BY created DESC"); 
 }
 else {  

    try {

    $stmt = $dbh->prepare("SELECT * FROM $tableName ORDER BY created DESC");

    }

    catch (PDOException $e) {

        getErrorsLog($e->getMessage());

    }

 }

$stmt->bindValue(1, $view, PDO::PARAM_STR);

$stmt->execute();

$affected_rows = $stmt->rowCount(); //Rows count

 if ($affected_rows == 0) {

     echo "The data you looking for no longer exist, please contact the administrator.";
     exit();
 }

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {

    $data[] = $row;

 }

echo json_encode($data);

closeDbConn();

?>
于 2013-05-20T17:36:58.893 回答
0

你的变量 css没有价值。您想使用字符串 'css'。也许您也希望能够加载其他类别。因此,将您的ajaxCall功能更改为

function ajaxCall(category)
{
    $.ajax({
        url: 'test.php',
        type: "GET",
        data: {cat: category},
        dataType: 'json',    
        success: function(rows) {
           alert(rows);
        },
        error: function() {
           alert("An error occurred.");
        }
    });
}

并使用

ajaxCall('css');
于 2013-05-21T13:57:12.977 回答