使用php和mysqli将数组传递回Ajax

时间:2014-06-27 19:57:41

标签: php jquery ajax mysqli

我目前正在开发一个迷你项目,我有2个mysql数据库表(问题和答案)。答案表包含questionid。我在ajax调用中使用以下查询选择了一个问题和4个相关答案,它有效但不确定它是否正确?

然后我将这个传回作为一个数组显示在我的网页上。问题是显示但不是答案,但我可以在控制台窗口的响应中看到值存在。我想也许是因为问题和答案都在同一个数组中?

非常感谢任何帮助。

的PHP / mysqli的

$sql= 'SELECT question FROM questions where difficulty = 1
UNION ALL
SELECT answer FROM answers a right join questions q on q.id = a.questionid WHERE q.difficulty = 1';
$result = $mysqli->query($sql) or die($mysqli->error.__LINE__);

if($result->num_rows > 0){
    $array = array(); // initialize
    while($row = $result->fetch_array(MYSQLI_BOTH)){
        $array[] = array(
        'question' => $row[0],
        'answer' => $row[1],
        'answer' => $row[2],
        'answer' => $row[3],
        'answer' => $row[4]
        );  
    }

}
header('Content-Type: application/json',true);
echo json_encode($array);   
$result->free();
$mysqli->close();

Ajax成功回复

function response(json){
  console.log(json);
  var quest = json[0].question;
  var ans1 = json[1].question;
  var ans2 = json[2].question;
  var ans3 = json[3].question;
  var ans4 = json[4].question;
  $("#questionBox").html('<h2>Q: ' + quest);
  $("#answerBox").html('<h2>Q: ' + ans1);
}

Ajax响应:

[{"question":"Is this an easy question?","answer":null},
{"question":"Yes","answer":null},
{"question":"No","answer":null},
{"question":"Maybe","answer":null},
{"question":"Who Knows","answer":null}]

直接从浏览器回复:

[{"question":"Is this an easy question?","answer":null},
{"question":"Yes","answer":null},
{"question":"No","answer":null},
{"question":"Maybe","answer":null},
{"question":"Who Knows","answer":null}]

1 个答案:

答案 0 :(得分:0)

var ans1 = json[1].question;

不应该是:

var ans1 = json[0].answer;

此外,用于创建数组的PHP代码也具有相同的answer键4次,我想这意味着即使你已经设置了4个,你在响应中只得到1个答案。您可能希望将其更改为:

  $array[] = array(
        'question' => $row[0],
        'answer1' => $row[1],
        'answer2' => $row[2],
        'answer3' => $row[3],
        'answer4' => $row[4]
        ); 

然后在javascript:

var ans1 = json[0].answer1;
var ans2 = json[0].answer2;