У меня есть запрос AJAX с JSON dataType, показанным здесь:

JS:

function checkForNewPosts() { var lastCustomerNewsID = {amp}lt;?php echo $customers_news[0]['id']; ?{amp}gt;; $.ajax({ url: "https://www.example.com/check_for_new_posts.php", method: "post", data:{ lastCustomerNewsID: lastCustomerNewsID, }, dataType:"json", success:function(data) { $.each(data, function( key, value ) { console.log(key   ": "   value); $('#wall_posts').prepend(value); }); } }); } 

PHP:

 if ($_POST) { $lastCustomerNewsID = $_POST['lastCustomerNewsID']; $new_posts = sw::shared()-{amp}gt;customers_news-{amp}gt;getNewForWall($lastCustomerNewsID); if ($new_posts) { foreach ($new_posts as $new_post) { $content = "{amp}lt;div class='wall_post'{amp}gt;"; $content .= $new_post['message']; $content .= "{amp}lt;/div{amp}gt;"; $last_id = $new_post['id']; $testyme[] = json_encode( array( "content" ={amp}gt; $content, "last_id" ={amp}gt; $last_id ), JSON_UNESCAPED_SLASHES ); } } echo json_encode($testyme); } 

Я хотел бы получить доступ к свойствам по отдельности, но он возвращает «значение» в виде всей строки, а не разбито на свойства «content» и «last_id».

Пример вывода с существующим кодом:

 109: {"content":"{amp}lt;div class='wall_post'{amp}gt;{amp}lt;/div{amp}gt;","last_id":"367"} 110: {"content":"{amp}lt;div class='wall_post'{amp}gt;testttt{amp}lt;/div{amp}gt;","last_id":"366"} 

Как я могу вернуть JSON, чтобы он был правильно доступен по свойству?

пример:

  $.each(data.last_id, function( key, value ) { $('#wall_posts').prepend(Id: ${value.last_id}, Content: ${value.content}{amp}lt;br{amp}gt;); }); 

Выход JSON:

 array ( 0 ={amp}gt; array ( 'content' ={amp}gt; '{amp}lt;div class='wall_post'{amp}gt;Check it out here: {amp}lt;a href='https://www.example.com/events/trymeguy/'{amp}gt;https://www.example.com/events/trymeguy/{amp}lt;/a{amp}gt;{amp}lt;/div{amp}gt;', 'last_id' ={amp}gt; '476', 

),

Не вызывайте json_encode() для каждого элемента массива. Просто закодируйте окончательный результат. Таким образом, строка в цикле должна быть:

  $testyme[] = array( "content" ={amp}gt; $content, "last_id" ={amp}gt; $last_id ); 

В JS, который обрабатывает ответ, вам нужно извлечь свойства.

 $('#wall_posts').prepend(value); 

должно быть что-то вроде:

 $('#wall_posts').prepend(`Id: ${value.last_id}, Content: ${value.content}{amp}lt;br{amp}gt;`);