Хотите напечатать цикл объекта json, но не можете получить доступ к значению объекта json - PullRequest
2 голосов
/ 06 ноября 2019

Когда я повторяю в своем php-коде json_encode($state);, в консоли будут отображаться данные в этом формате

{"branchid":"71","branchareaid":"4","branchname":"Zaidy","branchno":"11","branchnamearabic":"\u0625\u064a\u0645\u064a \u0632\u064a\u062f\u064a","branchaddress":"Unnamed Road, Al Hamra and Umm Al Jud, Makkah 24331, Saudi Arabia","branchlat":"21.38958330","branchlong":"39.70306130","branchstatus":"1","mobileno":"0566689175","googlemaplink":"https:\/\/goo.gl\/maps\/rK3oKf1wfVu","workingHours":"6 am to 3 am"}

У объекта JSON есть обе фигурные скобки с разделителями запятыми, когда я хочу напечатать в моем ajaxкод через цикл выдает ошибку и не печатает значения в li

<?php
include "admin/includes/dbconnection.php"; 
if($_POST){
    $state =  $_POST['state'];

}else{
    $state = 1;
}

?>

<?php 
$query = "SELECT * FROM branches WHERE branchareaid = {$state}";
$res = mysqli_query($conn,$query);
while($state = mysqli_fetch_assoc($res)){
    echo json_encode($state);

}
?>

Это мой ajax-код, который выбирает запись, но цикл не печатает значения объекта JSON

$(document).ready(function(){
        var url = "ajax-states.php";
        $("#state").change(function(){
            $.ajax({
                type: "POST",
                data: {state: $('#state').val()},
                url: url, 
                success: function(result){
                    $("#result").html(result);
                    console.log(result);
                    //var c=0;
                    $.each( result, function( index, branch) {
                        //var state = states[c];
                        $('.locations').append("<li>"+branch.branchname+"</li>");
                        c++;
                    });
                }
            });
        });
    });





jquery.min.js:2 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in 
{"branchid":"71","branchareaid":"4","branchname":"Zaidy","branchno":"11","branchnamearabic":"\u0625\u064a\u0645\u064a \u0632\u064a\u062f\u064a","branchaddress":"Unnamed Road, Al Hamra and Umm Al Jud, Makkah 24331, Saudi Arabia","branchlat":"21.38958330","branchlong":"39.70306130","branchstatus":"1","mobileno":"0566689175","googlemaplink":"https:\/\/goo.gl\/maps\/rK3oKf1wfVu","workingHours":"6 am to 3 am"}
    at C (jquery.min.js:2)
    at Function.each (jquery.min.js:2)
    at Object.success (new-find-a-store.php:553)
    at u (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at k (jquery.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2)

Ответы [ 5 ]

0 голосов
/ 07 ноября 2019

Проблема в php это исправить:

$data=array();
while($state = mysqli_fetch_assoc($res)){
    $data[]=$state;
}
echo json_encode($data);
0 голосов
/ 07 ноября 2019

$.each():

  • когда вы анализируете JSON, затем function (key, value)
  • , когда вы анализируете массив, function (index, value)

Из документации

var result = {"branchid":"71","branchareaid":"4","branchname":"Zaidy","branchno":"11","branchnamearabic":"\u0625\u064a\u0645\u064a \u0632\u064a\u062f\u064a","branchaddress":"Unnamed Road, Al Hamra and Umm Al Jud, Makkah 24331, Saudi Arabia","branchlat":"21.38958330","branchlong":"39.70306130","branchstatus":"1","mobileno":"0566689175","googlemaplink":"https:\/\/goo.gl\/maps\/rK3oKf1wfVu","workingHours":"6 am to 3 am"};
$.each( result, function( key, value) {
                        $('.locations').append("<li>"+key+" : "+ value + "</li>");
                    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="locations"></div>
0 голосов
/ 06 ноября 2019

Как я вижу, вы пытаетесь перебрать объект, как будто это список, этот код, похоже, не работает. Один из подходов может быть следующим:

  1. Объявите переменную для хранения списка ключей вашего объекта, с помощью словаря
  2. итерируйте этот список и выберите значениеобъект, основанный на этом элементе списка ключей.
var listOfKeys = (Object.keys(result));

for (var i = 0; i < Object.keys(result).length; i++) {

      $('.locations').append("<li>"+result[listOfKeys[i]]+"</li>");

  }

Если вы хотите использовать какое-либо конкретное свойство объекта, просто:

  $('.locations').append("<li>"+result.nameOfTheProperty+"</li>");

0 голосов
/ 06 ноября 2019
When i implement this code $.each(JSON.parse(result),function( index, branch) {
it shows the error


VM1962:2 Uncaught SyntaxError: Unexpected token { in JSON at position 409
    at JSON.parse (<anonymous>)
    at Object.success (new-find-a-store.php:559)
    at u (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at k (jquery.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2)
0 голосов
/ 06 ноября 2019

Первый параметр $.each() должен быть массивом, и вы передаете result, который является строкой.

Преобразуйте строку JSON в массив, используя $.each( JSON.parse(result), ..., и он будетok.

Объяснение: на стороне PHP вы преобразовали массив в строку json, используя json_encode, поэтому перед использованием его необходимо декодировать его в свой JavaScript.

PS: этот код может бытьнеправильный:

while($state = mysqli_fetch_assoc($res)){
    echo json_encode($state);

}

Потому что при циклировании он создаст вывод, подобный следующему:

{"branchid":"1","branchareaid":"1"}
{"branchid":"2","branchareaid":"2"}
{"branchid":"3","branchareaid":"3"}
{"branchid":"4","branchareaid":"4"}

Что не является допустимой строкой JSON для массива

ДопустимыйСтрока JSON для массива будет:

[
   {"branchid":"1","branchareaid":"1"},
   {"branchid":"2","branchareaid":"2"},
   {"branchid":"3","branchareaid":"3"},
   {"branchid":"4","branchareaid":"4"}
] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...