2011-09-27 62 views
1

我想在输出这个PHP代码回声name,star_type,servicejquery.each(),但我有错误。如何解决它?JSON数据后意外的非空白字符?

错误:

An error has occured:
[object Object]
parsererror
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

我有这样的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

你没有回应有效的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 :)

1

你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); 
相关问题