2015-04-21 3 views
1

Я новичок в AJAX, и я просто пытаюсь отобразить результаты базы данных с PHP на HTML через AJAX. Я загружаю «undefined» в журнал консоли при загрузке страницы. HTML, PHP и JS-файлы отделены друг от друга.PHP json_encode to AJAX, undefined

Вот мой JS код:

$(document).ready(function(){ 

$.ajax({ 

    type: "GET", 
    url: "xaja.php", 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 

    success: function(data){ 
     console.log(""+data.name); 
    }, 
    error: function(e){ 
     alert("Error:\n"+e); 
    } 

}); 

}); 

Вот мой PHP код:

<?php 

$json = array(

'username' => '', 
'name' => '', 
'loc' => '' 

); 


$sql = "Select * from tbluser"; 
$query = mysql_query($sql, $conn); 
$result = mysql_fetch_assoc($query); 

do{ 
    $json['username'] = $result['username']; 
    $json['name'] = $result['name']; 
    $json['loc'] = $result['location']; 
    echo json_encode($json); 
    $result = mysql_fetch_assoc($query); 

} 
while($result); 

?> 

Я пропускаю что-то здесь? Заранее спасибо!

+0

Используйте 'console.log' вместо' alert' для отладки Javascript - 'alert' только обрабатывает строки или строки, подобные значения,' консоли .log' может выводить почти что угодно. Вы сможете увидеть, что значение 'e' (объекта) и отладки станет намного проще. – Scott

+0

Спасибо, Скотт, вот ошибка: Object {readyState: 4, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), всегда: .Deferred/d.always(), затем: .Deferred/d.then(), еще 11 ...} – Ken

+0

Это говорит мне о неопределенности. – Ken

ответ

3

Вы выводящий несколько строк JSON. Для того, чтобы ваш ответ обрабатывался, он должен быть одной строкой. Попробуйте вместо этого:

$results = array(); 
do{ 
    $json['username'] = $result['username']; 
    $json['name'] = $result['name']; 
    $json['loc'] = $result['location']; 
    $results[] = $json; 
    $result = mysql_fetch_assoc($query); 
} 
while($result); 
echo json_encode($results); 
+0

все еще получает объект объекта. – Ken

+0

Пробовал снова. Он работает сейчас. Спасибо огромное! :) – Ken

+0

Теперь это успешно, но все же получение неопределенных данных на console.log :( – Ken

0

Почему не традиционный способ?

$sql = "Select * from tbluser"; 
$query = mysql_query($sql, $conn); 

if ($result = mysql_fetch_assoc($query)) { 
    $json['username'] = $result['username']; 
    $json['name'] = $result['name']; 
    $json['loc'] = $result['location']; 
    echo json_encode($json); 
} 

или если вам нужен массив массива:

$json = array(); 
$sql = "Select * from tbluser"; 
$query = mysql_query($sql, $conn); 

while ($result = mysql_fetch_assoc($query)) { 
    $json[] = array($result['username'], $result['name'], $result['location']); 
} 
echo json_encode($json); 
0

При возврате JSON это должно быть единой структурой, вместо того, чтобы выводить массив для каждой строки, вы должны быть достаточно построение массива и вывод его один раз.

$json = array(); 
do { 
    $json[]=$result; 
    $result = mysql_fetch_assoc($query); 
} while($result); 
echo json_encode($json); 

Это показывает каждую строку в качестве имени структуры ([{username:"",name:"",location:""},{}..])

Смежные вопросы