2013-12-13 2 views
-1

Я новичок в динамические данные и пытаетсяКак получить мои данные обратно

  1. чтения данных из базы данных MySQL с помощью PHP
  2. поворота этих данные в формат JSON
  3. выборку данных с помощью JavaScript (jQuery)
  4. Включая его в мою страницу.

Насколько я могу видеть, 1) и 2) работают нормально, 3) кажется видом работы и 4) находится там, где он ломается.

Я создал базу данных и таблицу, запрос & эхо данных как так (api.php)

<?php 

    include 'db.php'; 
    $con = new mysqli($host,$user,$pass,$databaseName); 

    /* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

    $query = "SELECT * FROM $tableName"; 
    $myArray = array(); 

    if ($result = $con->query($query)) { 
    $tempArray = array(); 
    while($row = $result->fetch_object()) { 
     $tempArray = $row; 
     array_push($myArray, $tempArray); 
    } 
    echo json_encode($myArray); 
    } 

    $result->close(); 
    $con->close(); 

?> 

Теперь я получаю его через JavaScript ...

jQuery(function($) {  
    $.ajax({          
     url: 'php/api.php', 
     data: "json", 
     dataType: "",  
     success: function(data) { 
      var r = new Array(), j = -1; 
      for (var key=0, size=data.length; key<size; key++){ 
       r[++j] ="<tr><td>"; 
       r[++j] = data[key][0]; 
       r[++j] = "</td><td>"; 
       r[++j] = data[key][1]; 
       r[++j] = "</td><td>"; 
       r[++j] = data[key][2]; 
       r[++j] = "</td></tr>"; 
      } 
      var joined = r.join(''); 
      console.log(joined); 
      $('#maintable tbody').html(joined);  
     } 
    }); 
}); 

... и выбросить его в элемент tbody моего стола.

Результат абсолютно не то, что я ожидал:

Смотрите http://i.imgur.com/hRNrmdC.jpg (извините за частично немецкий интерфейс)

Ответ на запрос GET действует JSON, по крайней мере, в теории (проверяется http://jsonlint.com/) , но для меня кажется, что данные обрабатываются как строка и разбиваются на массив символов (каждый символ «ключ» в данных []), поэтому «данные [ключ] [1] ничего не возвращает.

var json = JSON.stringify(eval("(" + data + ")")); 

и продолжение с json [key] [0] di dn't help ...

Теперь я удивляюсь, почему и особенно, что пошло не так и как исправлено.

+0

Почему вы используете переменную 'j'? Вы должны использовать 'key'. Это не часть ответа, но нет необходимости иметь две переменные. –

+4

Я думаю, что у вас есть варианты, немного запутанные, передавая только «json» в качестве данных и пустой dataType? – adeneo

+1

Почему в мире вы делаете 'JSON.stringify (eval (" (+) +)))? Было ли «данных» недостаточно? –

ответ

4

Вы перепутали ключи в Ajax вызова:

data: "json", 
    dataType: "",  

Должно быть:

dataType: "json", 

как вы не посылаете или с помощью каких-либо данных на всех.

+0

На самом деле кажется, что jQuery угадывает или что-то в этом роде, я получаю данные. Я «украл» большую часть кода с различных веб-сайтов, объясняя процедуру, поэтому мне сложно объяснить, как эти странные вещи оказались там. То же самое касается JSON.stringify (eval ...) (возможно, какая-то защита от инъекций?) И почему я использую «j» вместе с «ключом». Вернемся к проблеме, я думаю, я был смущен тем, какие данные мне нужны. Я получаю JSON, но мне нужен javascript obj. Оказывается, используя данные eval и получая доступ к ним так: «r [++ j] = data [key] [" planet "]; работает. –

+1

Чтобы сделать все лучше, вы были абсолютно правы: используя dataType json (я клянусь, парень, с которым я получил свой код, сделал это наоборот: D) достаточно, вам даже не нужно «анализировать» данные впоследствии , –

+0

@ChristianGeese. Когда вы указываете тип данных как 'json', jQuery анализирует результат, чтобы получить объект javascript. – jeroen

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