неожиданный непробельный символ после данных JSON? - PullRequest
1 голос
/ 27 сентября 2011

Я хочу в выводе этот код PHP эхо name, star_type, service по jquery.each(), но у меня есть ошибка.как это исправить?

ошибка:

Произошла ошибка:
[объект объекта]
parsererror
SyntaxError: JSON.parse: неожиданный не-символ пробела после данных JSON

У меня есть этот код PHP:

//$hotel_id = $this->input->post('hotel_id');
$hotel_id = array('1','2','3');
//print_r($hotel_id);
foreach ($hotel_id as $val) {
    $query_r = $this->db->query("SELECT * FROM hotel_submits WHERE id LIKE '$val' ORDER BY id desc");
    $data    = array();
    foreach ($query_r->result() as $row) {
        $data_s  = json_decode($row->service, true);
        $data_rp = json_decode($row->address, true);
        $data[]  = array(
            'name' => $row->name,
            'star_type' => $row->star . '-' . $row->type,
            'site' => $row->site,
            'service' => $data_s,
            'address' => $row->address
        );
    }
    echo json_encode($data);
}

Это выводится над кодом PHP:

[{
    "name": "how",
    "star_type": "5-hotel",
    "site": "www.sasaas.assa",
    "service": ["shalo", "jikh", "gjhd", "saed", "saff", "fcds"]"address": "chara bia paeen"
}][{
    "name": "hello",
    "star_type": "4-motel",
    "site": "www.sasasa.asas",
    "service": ["koko", "sili", "solo", "lilo"]"address": "haminja kilo nab"
}][{
    "name": "hi",
    "star_type": "3-apparteman",
    "site": "www.saassaas.aas",
    "service": ["tv", "wan", "hamam", "kolas"],
    "address": "ok"
}]

И этомой код JS, который получает ошибку:

$.ajax({
    type: "POST",
    dataType: "json",
    url: 'get_residence',
    data: dataString_h,
    cache: false,
    success: function (respond) {
        //alert(respond);
        $.each(respond[0].name, function (index, value) {
            alert(value);
        });
    },
    "error": function (x, y, z) {
        alert("An error has occured:\n" + x + "\n" + y + "\n" + z);
    }
});

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Вы не повторяете действительный JSON.Попробуйте это:

$hotel_data = array();
foreach(...) {
    // .. do stuff
    $hotel_data[] = $data; // add $data to the end of the $hotel_data array
}
echo json_encode(array('data' => $hotel_data));

Это обернет все массивы $data в массив и поместит его в атрибут данных объекта.Вы можете получить доступ к этим данным на стороне js следующим образом:

$.each(response.data, function(i, obj) {
    alert(obj.name);
});

Примечание: Я не уверен в синтаксисе php, который я написал выше, это было давно, так как я написал php:) * +1010 *

1 голос
/ 27 сентября 2011

Ваш JSOn полностью недействителен. Вы не должны отображать массив json-ecnoded внутри цикла, но вне его:

$all_data = array();
foreach ($hotel_id as $val) {
    //..what you have there now, but instead if echo json_encode($data); you do
    $all_data[] = $data;
}
//and finally
echo json_encode('data'=>$all_data);
1 голос
/ 27 сентября 2011

Ваш вывод php не является действительным json, вы пропустили запятую раньше "address".

Вы можете проверить свой json по этому URL: http://json.parser.online.fr/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...