2013-09-18 4 views
1

Я пытаюсь получить JSON со страницы PHP, но всегда получаю «undefined».[field] Solved [/ field] Возвращение JSON через Ajax с помощью jQuery

Мой JQuery код:

<script> 
    $(document).ready(function(){ 
     $("#lista_partecipanti").click(function(){ 
      $.post("application/third_party/php_files/lista_partecipanti.php", 
      { 
       user_id:<? echo $user_id; ?> , jam_id:<? echo $id_jam; ?> 
      }, 
      function(data) 
      { 
       if(data) { 
        $("#div_lista_partecipanti").html('test' + data[0].username); 
       } 
       else 
       { 
        alert("Error");          
       } 
      }); 
     }); 
    }); 
</script> 

Мой PHP код:

<?php 
include 'db_connect.php'; 

$a_id = $_POST['user_id']; 
$b_id = $_POST['jam_id']; 

$query = mysql_query("SELECT * FROM User a, Jam b WHERE a.id = b.owner AND a.id = $a_id AND b.id = $b_id"); 

if(mysql_num_rows() == 1) 
{ 
    $row = mysql_fetch_assoc($query); 
    $data = array(
      'username' =>$row['username'], 
      'user_id' => $row['id'] 
    ); 
    $data = json_encode($data); 
    echo $data;  
} 
else 
    return false; 

mysql_close(); 
?> 

я решил мою проблему, это не было проблемой PHP, но ошибка была в коде Jquery. Я просто добавил

data = $.parseJSON(data); 

перед тем

$("#div_lista_partecipanti").html(data.username); 
+1

У вас есть уязвимость в SQL-инъекции. – SLaks

+0

Покажите нам возвращенный ответ. – SLaks

+0

** Danger **: вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068) и должны использовать [современную замену] (http: // php. нетто/ручной/EN/mysqlinfo.api.choosing.php). Вы также уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

ответ

3

Поскольку вы не указано иначе, поэтому PHP будет утверждать, что он выводит HTML-документ, и JQuery будет рассматривать JSON, как если бы это были HTML ,

Добавить header("Content-Type: application/json"); перед тем, как вы выведете что-нибудь из своего PHP.


Во-вторых, ваш текст JSON состоит из одного объекта, а не массива объектов.

data[0].username должен быть только data.username

+0

Спасибо, я сделал это, но он все еще извлекает «undefined» – JackLipari

+0

Это не работает, и я не знаю почему! Справка: ((( – JackLipari

-1
 jQuery.ajax({ 
      type: "POST", 
      url: "application/third_party/php_files/lista_partecipanti.php", 
      data: "userid="+<?php echo $user_id; ?>+"&jam_id="<?php echo $id_jam; ?>, 
      cache: false, 
      success: function(response) { 
        ... 
       } 
      } 
     ); 
+0

Зачем голосовать? – sskoko

1

Во-первых, вы очень открыты для инъекций MySQL, вы должны использовать mysqli или pdo подготовленные заявления.

Во-вторых, вы не должны эхо JSON внутри цикла, это не работает, вам нужно добавить все данные в массив, а затем json_encode и вернуть его после цикла, хотя для вашего примера это только один элемент, но все же.

<?php 
include 'db_connect.php'; 
header("Content-Type: application/json"); 

$a_id = $_POST['user_id']; 
$b_id = $_POST['jam_id']; 

$query = mysql_query("SELECT * FROM User a, Jam b WHERE a.id = b.owner AND a.id = $a_id AND b.id = $b_id"); 

if(mysql_num_rows() >= 1) { 
    $data = array(); 
    while($row = mysql_fetch_assoc($query)){ 
     $data[] = array(
      'username' =>$row['username'], 
      'user_id' => $row['id'] 
     ); 
    } 
    echo json_encode($data); 
} else { 
    echo json_encode([]); 
} 
mysql_close(); 
+0

Цикл - это красная селедка. Существует только одна соответствующая строка ... или в исходном коде. Вы изменили условие проверки. – Quentin

+0

да, это придает смысл. – OneOfOne

+0

I изменил его, добавил json заголовок, но он все еще показывает «undefined». – JackLipari