2013-06-15 4 views
0

У меня есть php-файл, где я извлекаю данные из базы данных, и я хочу получить доступ к его содержимому в javascript. Когда я пытаюсь получить доступ к массиву с данными [0] .card_id, я получаю «undefined».Как получить доступ к этому ассоциативному массиву в javascript?

Вот мой Javascript

$(document).ready(function() { 
    var userId = 1; 
    var updateUrl; 

    $.ajax({ 
    type: "POST", 
    url: "url", 
    data: {userId: userId}, 
    success: function(data) { 
     alert(data[0].card_id); 
     var suffix = ".html"; 
     fb.start('../Animations/' + updateUrl[0].card_id + suffix); 
    } 
    }); 
} 

Вот мой PHP файл

<?php 

include('connect.php'); 

$user_id = $_POST['userId']; 

$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL"; 
} 

$select = "SELECT card_id FROM decks WHERE id=$user_id ORDER BY order_num"; 
$result = mysqli_query($db, $select); 

while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) { 
    $animation[] = array(
     'card_id' => $row['card_id'], 
    ); 
} 

json_encode($animation); 
echo $animation; 
mysqli_close($db); 
?> 

Массив содержит следующие данные

Массив ( [0] => едят [1 ] => мумия

и т. Д. )

+2

Вы уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, которые вам нужно [защищать] (http://stackoverflow.com/questions/60174/best- путь к предотвращению-sql-injection-in-php). – Quentin

+0

Спасибо, я прочитал о SQL-инъекции, и я собираюсь разобраться с этим, как только мое приложение будет построено. –

ответ

1

У вас есть две проблемы.

Во-первых: Вы ничего не делаете с возвращаемым значением json_encode.

Во-вторых: PHP утверждает, что он отправляет обратно HTML, поэтому в любом случае он не будет разбираться как JSON.

header("Content-Type: application/json"); 
echo json_encode($animation); 
+0

Извините, им совсем новые, и я не понимаю ваш ответ, не могли бы вы подробнее рассказать о заголовке («Content-Type: application/json»); ? Я понимаю вторую часть, я сделал эту ошибку до глупости :( –

+0

Когда HTTP-сервер отвечает ресурсом, он говорит, какой ресурс он есть. 'Application/json' означает« текст JSON »./html' означает «HTML-документ». «image/png» означает «Изображение в формате PNG». PHP сообщит серверу отправить 'text/html', если вы не скажете иначе. jQuery будет смотреть на тип содержимого и использовать чтобы решить, какой синтаксический анализ должен выполнить ответ, прежде чем помещать его в 'data'. – Quentin

+0

Спасибо, просто поместите заголовок после тега php, например'

1

Вам необходимо добавить dataType: "json" в ваш вызов ajax.

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "url", 
    data: {userId: userId}, 
    success: function(data) { 
     alert(data[0].card_id); 
     var suffix = ".html"; 
     fb.start('../Animations/' + updateUrl[0].card_id + suffix); 
    } 
}); 

http://api.jquery.com/jQuery.getJSON/

Там нет необходимости изменить тип MIME, JQuery будет обрабатывать это.

+0

. Имеет смысл сказать серверу сказать «Это JSON» вместо этого разрешить его лгать и сказать «Это HTML», то он сообщает JQuery игнорировать то, что утверждает сервер. – Quentin

+0

Я добавил dataType, но все равно получаю «undefined» в своем уведомлении :( –

+0

@Quentin Yep, но в обоих случаях он будет работать нормально. – ghost

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