0

我返回的数组以这种无效的奇怪格式返回。至少在我的 AJAX 经验中没有。

function get_within($latitude, $longitude) { 
global $pdo;

  // $lat = $latitude;
  // $long = $longitude;
  // $long = '-70.98245279999999';
  // $lat = '41.98156549999999';

    $stmt = $pdo->prepare("SELECT menu_id, latitude, longitude ( acos(
          cos( radians(".$latitude."   ) ) *
            cos( radians( latitude) ) * 
            cos( radians(".$longitude.") - radians(longitude)) +
            sin( radians(".$latitude.") ) * sin( radians(latitude) ) ))*.621371192
as dis from pages where 1 ORDER BY `dis` ASC LIMIT 10");

$stmt->execute( array() );

return $stmt->fetchAll( PDO::FETCH_OBJ );

我使用上述函数发出了 AJAX 请求。我需要它返回一个对象,但它只返回一个这样的数组:

[{"id":"26","subject_id":"5","menu_name":"Bobby Byrne's Food & Pub\u200e","position":"1","visible":"1","content":"Bobby Byrne's Restaurant & Pub\u200e\r\n65 Massachusetts 6A, Sandwich, MA\r\n(508) 888-6088","longitude":"-70.508598","latitude":" 41.765754","dis":"0.00245126419033985"}]

出了什么问题,如何正确取回对象中的查询以供使用?

4

2 回答 2

1

您的响应是一个 JSON 编码的对象。您需要将 JSON 解码为对象。

请参阅: http: //php.net/manual/en/ref.json.php

于 2012-05-23T17:36:32.773 回答
0

正如@DanArmstrong 指出的那样,返回的 JSON 数组没有什么奇怪或无效的。根据文档 PDOStatement::fetchAll应该返回一个数组——它是——当你将一个数组编码为 JSON 时,它使用数组表示法,这是有效的 JSON 和你在这里看到的。

如果你想要一个 JSON 对象而不是数组,你需要:

  1. 在服务器端从返回的数组中获取一个项目fetchAll并对该值进行编码(例如json_encode( $results[0] )),而不是对整个返回的数组进行编码,或者
  2. 在客户端从解码的数组中获取一个项目,例如JSON.parse( data )[0]
于 2012-05-23T18:09:53.727 回答