我试图从我的数据库中检索信息并在JQuery生成的表中显示信息。我以前做过这个,并且使用完全相同的代码,它不再起作用了。我已经查询了其他几个有关此问题的问题,但他们都没有给我答案。 情况就是这样:用户从选择菜单中选择一个值,通过选择一个值,该值被发送并用于检索正确数据的右键。然后,通过按下按钮,数据应显示在表格中。为了实现这一点,我使用了3个ajax调用,一个用于填充选择框,一个用于发送正确的值,另一个用于检索所需的数据。前两个工作完美,但不是最后一个。 我的浏览器会收到数据(见下文),但表格没有显示,而且我收到了JSON输入的意外结束'错误。任何人都可以帮我解决这个问题吗?
带有错误的Ajax的HTML / Jquery:
function BekijkGegevens() {
$.ajax({
type: 'GET'
, data: {}
, dataType: 'json'
, url: "https://projectmi3.000webhostapp.com/webservices/bekijk.php"
, success: function (rows) {
$('#output').append("<table><tr><th> datum</th><th>stand</th></tr>")
for (var i in rows) {
var row = rows[i];
var datum = row[1];
var stand = row[0];
$('#output').append("<tr><td>" + datum + "</td><td>" + stand + "</td></tr>");
}
$('#output').append("</table>");
}
, error: function (JQXHR, TextStatus, ErrorThrow) {
console.log(JQXHR);
console.log(TextStatus);
console.log(ErrorThrow);
}
})
}
PHP:
<?php
include_once('confi.php');
error_reporting(E_ALL);
if (isset($_POST['teller']))
{
$teller = mysqli_real_escape_string($conn,$_POST['teller']);
$sql2="SELECT sta_stand,sta_datum FROM stand WHERE teller_id = '$teller'";
$result = $conn -> query($sql2);
//$query2 = mysql_query($sql2) or trigger_error(mysql_error()." ".$sql2);
$data2=array();
while ($row = mysqli_fetch_row($result))
{
$data2[]=$row;
}
echo "{data:" .json_encode($data2). "}" ;
}
?>
感谢您提供的任何帮助。
编辑:忘了放我的浏览器网络,就在这里。 http://puu.sh/uzI4f/a9ed1e0be5.pngEDIT2:我已将PHP脚本拆分为两个单独的文件,并尝试使用会话变量按照注释中的建议传递所需的密钥。然而,我仍然得到同样的错误。这里有两个新的PHP文件: 这个用于将密钥从Jquery发送到PHP:
<?php
include_once('confi.php');
error_reporting(E_ALL);
session_start();
if (isset($_POST['teller']))
{
$teller = mysqli_real_escape_string($conn,$_POST['teller']);
$_SESSION['teller'] = $teller;
}
?>
这个用于获取所需信息:
<?php
include_once('confi.php');
error_reporting(E_ALL);
session_start();
if (isset($_SESSION['teller']))
{
$sql2='SELECT sta_stand,sta_datum FROM stand WHERE teller_id ="' .$_SESSION['teller'].'"' ;
$result = $conn -> query($sql2);
//$query2 = mysql_query($sql2) or trigger_error(mysql_error()." ".$sql2);
$data2=array();
while ($row = $result-> fetch_row())
{
$data2[]=$row;
}
echo json_encode($data2);
}
?>
答案 0 :(得分:1)
首先,一些警告(in accordance with this link):
Little Bobby说 your script is at risk for SQL Injection Attacks. 了解prepared的MySQLi语句。即使escaping the string也不安全! Don't believe it?
您应该在第二个脚本中测试会话变量,该变量应如下所示:
<?php
include_once('confi.php');
error_reporting(E_ALL);
session_start();
if (isset($_SESSION['teller']))
{
$teller = $_SESSION['teller'];
$sql2="SELECT sta_stand,sta_datum FROM stand WHERE teller_id = '$teller'";
$result = $conn -> query($sql2);
$data2=array();
while ($row = mysqli_fetch_row($result))
{
$data2[]=$row;
}
echo json_encode(['data'=> $data2]);
}
?>
请注意,我还要附加“数据”。适当地使用JSON而不是仅仅尝试粘合&#34; (正如Denis Matafonov所说)JSON字符串在一起。
答案 1 :(得分:-1)
不要尝试将数据粘贴到字符串中,如下所示:
echo "{data:" .json_encode($data2). "}" ;
使用简单的
echo json_encode(['data'=> $data2]);
如果一切正常,它应该产生相同的结果,但如果你的$ data2为null,则不会分解json
在if语句之前在begginng中声明你的$ data2:
$data2 = [];
if (isset($_POST['teller'])) {
//do stuff and redefine $data2 or fill it;
}
//always echo valid json, event if no $POST["teller"] has arrived
echo json_encode(['data' => $data2]);