Jquery - parsererror - JSON输入的意外结束

时间:2017-03-08 14:09:31

标签: php jquery json ajax

我试图从我的数据库中检索信息并在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.png

EDIT2:我已将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); 
}

?>

2 个答案:

答案 0 :(得分:1)

首先,一些警告(in accordance with this link):

Little Bobby your script is at risk for SQL Injection Attacks. 了解preparedMySQLi语句。即使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)

  1. 不要尝试数据粘贴到字符串中,如下所示:

    echo "{data:" .json_encode($data2). "}" ; 
    
  2. 使用简单的

    echo json_encode(['data'=> $data2]);
    

    如果一切正常,它应该产生相同的结果,但如果你的$ data2为null,则不会分解json

    1. 在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]);