0

我正在使用 ajax 从表(mysql)返回结果。Ajax 调用是使用 jquery 进行的。使用 PDO 访问数据库。

PHP

    function fetchQuestions() {
            $database = "answerMe";  // the name of the database.
            $server = "127.0.0.1";  // server to connect to.
            $db_user = "name";  // mysql username to access the database with.
            $db_pass = "password";  // mysql password to access the database with.
            $table = "questions";
            $result = "";

            try {
              $testh = new PDO ("mysql:host=$server;dbname=$database", $db_user, $db_pass);
              $testh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
              $testh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
              $sql = "select COUNT(*) from questions";
              $pstatement = $testh->prepare($sql);
              $success = $pstatement->execute();
              $num = $pstatement->fetchColumn();
              $sql = "select * from $table";
              $pstatement = $testh->prepare($sql);
              $success = $pstatement->execute();
              print("Fetch all of the remaining rows in the result set:\n");
              $result = $pstatement->fetchAll(PDO::FETCH_COLUMN, 1);
              return $result;
            }
            catch(PDOException $e)
            {
              echo "Following error was encountered <br />";
              echo $e->getMessage();
            }
    }
    $function = $_POST['function'];    
    $response = array();
    $data = "";

    switch($function) {
             .
             .
             .      

             case('recData'):
                //$qs = array('w','k');
                $qs = fetchQuestions();
                $response['records'] = $qs;
                    break;
    }    
    echo json_encode($response);

Jquery(ajax部分)

    function AjaxReq(){
            this.sendSuccess = false;
            this.recSuccess = false;
            this.send = sendData;
            this.rec = recData;
    }
    .
    .
    .
    function recData() {
            $.ajax({
               type: "POST",
               url: "ajax.php",
               data: {  'function': 'recData',
                                    },
               dataType: "json",

               success: function(data){
                       alert('rec succeeded');
                       this.recSuccess = true;
                       for(var i = 0; i < data.records.length; ++i) {
                                    $("#details").append(data.records[i]);
                            }
               },
            });
    }

Jquery(调用ajax)

    $(document).ready(function(){
            var reqTest = new AjaxReq();
            $("#done").bind('click',function(){
                    reqTest.rec();
            });
    });

在 PHP 代码中,案例 'recData',如果我取消注释 //$qs = array('w','k');,我会得到结果。

这让我得出结论,也许 $qs 可能不是一个数组。但是使用 is_array(),它被证明不是这样。

我已尽我所能将不相关的代码远离这里。任何帮助,将不胜感激。谢谢你。

4

3 回答 3

0

尝试使用这个 java 脚本 var_dump 库来 debag 你的数据响应。 https://github.com/kvz/phpjs/blob/master/functions/var/var_dump.js

于 2013-08-09T07:22:10.983 回答
0

我已经按照sscce中的概述修剪了您的代码。您应该避免使用 Try/Catch 块,除非您要处理捕获的异常,例如如果数据库关闭。

$database = "answerMe";  // the name of the database.
$server = "127.0.0.1";  // server to connect to.
$db_user = "name";  // mysql username to access the database with.
$db_pass = "password";  // mysql password to access the database with.
$testh = new PDO ("mysql:host=$server;dbname=$database", $db_user, $db_pass);
$testh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$testh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "select * from $table";
$pstatement = $testh->prepare($sql);
$success = $pstatement->execute();
$result = $pstatement->fetchAll(PDO::FETCH_COLUMN, 1);
var_dump($result); 

var_dump($result)转储有关变量的信息。如果结果是所需的,您可以随时添加功能测试。

编辑 假设结果令人满意。

  1. 更改var_dump($result)echo json_encode($result)
  2. header('Content-Type: application/json')之后添加<?php
  3. 将代码保存在 ajaxtest.php
  4. 使用以下代码显示 JSON(使用getJSON
  5. 如果结果令人满意并入您自己的代码中

代码

$(document).ready(function() {
    $.getJSON('ajaxtest.php', function(data) {
        $.each(data, function(i, item) {
            $('#result').append('<p>' + data[i].records + '</p>');
        });
    });   
});

编辑 2 而不是使用$sql = "select * from $table" 你应该使用$sql = "select `records` from $table". 这将消除使用fetchColumn()的需要。fetchColumn(1)检索第 2 列而不是第 1 列

于 2013-08-09T10:53:55.643 回答
0

以下行中的打印语句产生了问题。

    $success = $pstatement->execute();
    print("Fetch all of the remaining rows in the result set:\n");
    $result = $pstatement->fetchAll(PDO::FETCH_COLUMN, 1);

干扰了 JSON 的编码并造成了所有麻烦。删除它可以解决问题。

Ajax 调用必须始终伴随错误处理程序以帮助调试。

    error: function(xhr, textStatus, errorThrown) {
            alert('An error occurred! ' + ( errorThrown ? errorThrown :
            xhr.status ));
于 2013-08-26T12:41:51.727 回答