我正在使用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(),它被证明是另外的。
我尽力将不相关的代码放在这里。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
我按照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)转储有关变量的信息。 如果结果是必需的,您可以随时逐步添加功能测试。
修改强> 假设结果令人满意。
var_dump($result)
更改为echo json_encode($result)
header('Content-Type: application/json')
<?php
代码
$(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列
答案 1 :(得分:0)
尝试使用此javascript var_dump库来调试您的数据响应。 https://github.com/kvz/phpjs/blob/master/functions/var/var_dump.js
答案 2 :(得分:0)
以下行中的print语句产生了问题。
$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 ));