首页 > 解决方案 > 想要打印 json 对象的循环但无法从 json 对象访问值

问题描述

当我在我的 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"}

当我想通过循环在我的 ajax 代码中打印时,JSON 对象的两侧花括号用逗号分隔,它会给出错误并且不打印 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)

标签: javascriptphpjsonajaxloops

解决方案


如我所见,您正在尝试像列表一样迭代对象,该代码似乎不起作用。一种方法可能如下:

  1. 声明一个变量来存储对象的键列表,witch 是一个字典
  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>");


推荐阅读