получить JSON не импортируется Jquery? - PullRequest
0 голосов
/ 12 февраля 2012

У меня проблемы с загрузкой JSON в приложение, которое я создаю

  $("#load_basic").click(function(){

  $.ajax({
    url: 'php/show.php',
    method: 'get',
    dataType: 'json',
    success: function(json) {
      $("#textarea").html(json.doc);
    }
  });
});

Мой JSON из show.php выглядит следующим образом

{
"id": "1",
"title": "doc 1",
"doc": "Lorem Ipsum",
"lastsaved": "2012-02-12 08:33:49"
} {
"id": "3",
"title": "doc 2",
"doc": "another lorem ipsum document",
"lastsaved": "2012-02-12 08:39:31"
}

Пожалуйста, кто-нибудь может помочь. Сначала я пытался сделать это локально, и я подумал, что это может быть проблемой, но теперь я попробовал это вживую на сервере и до сих пор не радует. Есть идеи?

Это источник show.php для создания файла JSON

<?php
header('Content-type: application/json');
include 'db.php';
 $query = 'SELECT * FROM docs';
 $result = mysql_query($query) or die('<p class="db_error"><b>A fatal MySQL error    occurred while trying to select <b>EVERYTHING</b> from the database.</b><br />Query: '.$query.'<br />Error: ('.mysql_errno().') '.mysql_error().'</p>');

 while ($row = mysql_fetch_assoc($result)) { 
      $arr = array('id'=>$row['id'],'title'=>$row['title'],'doc'=>$row['doc'],'lastsaved'=>$lastsaved = $row['lastsaved']);
        echo json_encode($arr);
 }//end while
?>

Ответы [ 4 ]

1 голос
/ 12 февраля 2012

Загруженный вами JSON не является допустимым JSON. Я думаю, что вы ожидаете, что массив JSON выглядит следующим образом.

[{
"id": "1",
"title": "doc 1",
"doc": "Lorem Ipsum",
"lastsaved": "2012-02-12 08:33:49"
}, {
"id": "3",
"title": "doc 2",
"doc": "another lorem ipsum document",
"lastsaved": "2012-02-12 08:39:31"
}]

Обратите внимание на наличие квадратных скобок и запятых. Чтобы получить такой вывод, используйте json_encode() для массива объектов (или ассоциативных массивов, в зависимости от того, что вы используете), вместо того, чтобы выводить каждый из них по отдельности. Например вместо:

while ($row = mysql_fetch_assoc($result)) { 
    $arr = array('id'=>$row['id'],'title'=>$row['title'],'doc'=>$row['doc'],'lastsaved'=>$lastsaved = $row['lastsaved']);
    echo json_encode($arr);
}//end while

Do:

$arr = array();
while ($row = mysql_fetch_assoc($result)) { 
    $arr[] = array('id'=>$row['id'],'title'=>$row['title'],'doc'=>$row['doc'],'lastsaved'=>$lastsaved = $row['lastsaved']);
}//end while
echo json_encode($arr);

Если у вас много данных, которые могут не помещаться в память как один массив, вы можете попробовать:

  1. эхо [ символ
  2. Для каждого объекта, который вы хотите проанализировать:
    1. эхо , символ, если это не первый объект
    2. эхо JSON для вашего объекта
  3. эхо ] символ
1 голос
/ 12 февраля 2012

Это не допустимый JSON. Вы пропускаете запятую между объектами.

...
"lastsaved": "2012-02-12 08:33:49"
} {
 ^ Missing comma

Возможно, вы хотите отправить массив объектов и обратиться к json[0].doc, например:

[{ ... },  { ... }]

или просто отправьте один объект и обратитесь к json.doc:

* * 1010
0 голосов
/ 12 февраля 2012

Настройте свой код здесь:

<?php

while ($row = mysql_fetch_assoc($result)) 
{ 
    $arr = array('id'=>$row['id'],'title'=>$row['title'],'doc'=>$row['doc'],'lastsaved'=>$lastsaved = $row['lastsaved']);
        echo json_encode($arr);
}//end while
?>

должно стать

<?php

$json_output = array();
while ($row = mysql_fetch_assoc($result)) 
{ 
    $json_output[] = array('id'=>$row['id'],'title'=>$row['title'],'doc'=>$row['doc'],'lastsaved'=>$lastsaved = $row['lastsaved']);

}//end while

echo json_encode($json_output);
?>
0 голосов
/ 12 февраля 2012

Поскольку вы возвращаете два объекта, они должны быть в массиве.

Ваш JSON должен быть:

[
    {
        "id": "1",
        "title": "doc 1",
        "doc": "Lorem Ipsum",
        "lastsaved": "2012-02-12 08:33:49"
    },
    {
        "id": "3",
        "title": "doc 2",
        "doc": "another lorem ipsum document",
        "lastsaved": "2012-02-12 08:39:31"
    }
]
...