2017-03-08 75 views
-1

我試圖找回從我的數據庫信息,並在顯示的jQuery生成的表中的信息的意外結束。我曾經這樣做過,並使用完全相同的代碼它不工作了。我擡頭一看一下這幾款其他問題,但他們都不給我一個答案。 情況是這樣的:一個用戶從選擇菜單中選擇一個值,通過選擇一個值,這個值被髮送和用於檢索正確的數據在正確的關鍵。然後,通過按下一個按鈕,該數據應該會出現在表中。爲了做到這一點,我使用了3個Ajax調用,一個用於填充選擇框,一個用於發送正確的值,另一個用於檢索所需的數據。前兩個完美的工作,但不是最後一個。 我的瀏覽器接收到的數據(見下文),但該表沒有出現,我得到一個錯誤「JSON輸入意外結束」。任何人都可以幫我解決這個問題嗎?jQuery的 - parsererror - JSON輸入

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

編輯2:我已經將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

如果你在成功回調中使用'console.log(rows)',你會看到數據嗎? –

+1

聽起來像你的JSON是無效的。查看網絡標籤中的請求,看看你有什麼。 – epascarello

+1

您正在打印破碎的json。 '{data:'缺少引號。 – tkausl

回答

-1
  1. 不要嘗試到數據串,這樣的:

    echo "{data:" .json_encode($data2). "}" ; 
    

使用簡單

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

應該產生相同的結果,如果一切順利,但難道不分手的json如果你的$數據2爲空

  • 聲明你$ DATA2在begginng,前if語句:

    $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]); 
    
  • +0

    我試圖改變它,現在Ajax TextStatus錯誤返回:「Parse error:syntax error,unexpected'[',expect ... 47/public_html/webservices/beekijk.php on line26↵」,status:200 ,statusText:「parsererror」}「 –

    +0

    」它應該產生相同的結果「實際上,它不應該,因爲它會產生_correct_結果,其中'data'被引用,因爲JSON需要引用鍵。 – tkausl

    +0

    請參閱編輯。如果$ _POST中沒有出納員,則不要回顯json –

    1

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

    Little Bobbyyour 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,而不是隻是想「膠水」(如Denis Matafonov所說)JSON字符串在一起。