0

このコントローラーを使用してデータベースからデータを取得し、有効な JSON データとして送り返しますが、http 応答には有効な JSON がありますが、application/json ではなく text/html であるため、getJSON は機能しません。(とにかく getJSON が機能するはずでない限り?)

  public function sendjsonAction()
  {
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);

    $message = $this->getDoctrine()
    ->getRepository('AcmeStoreBundle:Message')
    ->findAll();
    $serializer = $serializer->serialize($message, 'json');
    return new Response($serializer);
}

json の URL にアクセスすると、次のようになります。

[{"id":1,"iam":1,"youare":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"あそこで会ったけどどうした!"},{" "},{"id": "},{"id":4," iam":1,"youare":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"あそこにいるのを見たけどどうした!"},{"id":5,"iam": 1,"あなた":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"どうしたの?あそこどうしたの!"}]

したがって、次のJavascriptを含む「showall」という別のページがあります。

$.getJSON('/app_dev.php/sendjson', function(data) {
  var items = [];

  $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
  });

  $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

そして、その JS の結果は次の html です。

<ul class="my-new-list">
<li id="0">[object Object]</li>
<li id="1">[object Object]</li>
<li id="2">[object Object]</li>
<li id="3">[object Object]</li>
<li id="4">[object Object]</li>
<li id="5">[object Object]</li>
</ul>

json_encode を使用しようとすると、事態はさらに複雑になります。これが私が得た答えです。

"[{\"id\":1,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"},{\"id\":2,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"},{\"id\":3,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"},{\"id\":4,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"},{\"id\":5,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"},{\"id\":6,\"iam\":1,\"youare\":2,\"lat\":50.8275853,\"lng\":4.3809764,\"msgbody\":\"I saw you over there what's up!\"}]"

エスケープされた二重引用符... ! これらの二重引用符をエスケープしないように、json_encode にオプションを追加する必要がありますか?

4

2 に答える 2

2

に依存している場合はContent-Type、を使用header()して適切なものを設定します。

header('Content-type: application/json');
于 2013-02-11T16:51:56.590 に答える