【问题标题】:Ajax JSON.parse JSONarrayAjax JSON.parse JSONarray
【发布时间】:2021-07-16 19:05:06
【问题描述】:

当从下拉列表中选择选项时,我正在尝试从 mysqli 数据库填充表单。我正在尝试通过对 PHP 页面的 ajax 'get' 调用来做到这一点。 PHP 页面执行 SQL 查询并返回结果,然后我对数据进行 json_encode。这会将 JSON 放入一个数组中。然后 ajax 函数尝试解析 JSON。然而,这就是问题所在。 JSON 数据以数组形式出现,而 JSON.parse(xhr.response) 无法解析。

[{"id":"12","accountnum":"2148","name":"Blah","address":"123 Dan Hwy","city":"ANY Town","state":"IA","zip":"11111","phonenumber":"555-555-5555","brand":"Dan","create_date":"2021-06-14 15:47:36"}]

/////////////////////////////////////// ///

<script>
  const selectElement = document.querySelector('.accountnum');
  selectElement.addEventListener('change', (event) =>{
    const result = document.querySelector('.result');
    var eventResponse = `${event.target.value}`;
    result.textContent = 'the account num is ' +eventResponse;
    loadAccounts(eventResponse);
  });
</script>

/////////////////////////////////

  function loadAccounts(eventResponse){
    var xhr = new XMLHttpRequest();
    var url = "users.php";
    var geturl = xhr.open('GET', url+"?accountnum="+eventResponse, true);
    xhr.onreadystatechange = function(){
      if(xhr.readyState === XMLHttpRequest.DONE) {
        if(this.status == 200){
          console.log(xhr.response);
          var accounts = JSON.parse(xhr.response);
          console.log(accounts.id);
          console.log(accounts.name);
          var output = '';

        for(var i in accounts){
          output += '<div class="form-group">' +
            '<label for="accountname">AccountNum*</label>' +
            '<input type="text" class="form-control" id="accountnum" name="accountnum" value= '+accounts[i].accountnum+ '>' +
            '</div>'
          
        }
        document.getElementById('accounts').innerHTML = output;
      }
    }
    }
    xhr.send()
  }
</script>

/////////////////////////////////////// /

<?php
      
      $accountnum = $_GET['accountnum'];
      $query = "SELECT * FROM accounts WHERE accountnum = $accountnum";
      $result = mysqli_query($conn, $query);
      $accounts = mysqli_fetch_all($result, MYSQLI_ASSOC);
      echo json_encode($accounts);

   ?>

【问题讨论】:

  • 明白了。是的,这只是一个快速而肮脏的例子。在我们上线之前我会清理它。

标签: php json ajax


【解决方案1】:

您的响应是一个数组,而不是一个对象。尝试重新分配帐户变量,例如 accounts = accounts[0];。或者让你的 php 脚本从结果集中提取第一个元素并 json 对其进行编码 loke echo $accounts[0] ?? null;

【讨论】:

  • 好的,这正在工作。但现在我只得到返回值的第一部分。例如,如果“Dan's Garage”返回“name”值,我只看到“Dan's”。但是,如果我查看 JSON 数组,所有值都是完整的。
  • 这是一个单独的问题,可能是您的数据没有正确转义。尝试转义数据或单独调试。您是否尝试过在 JSON.parse 之前和之后记录数据?
  • 如果我 console.log(accounts[i].name) 然后我看到完整的帐户名称,所以它现在正在被正确解析。但如果我“输入 type=text value=accounts[i].name”,那么我只会看到第一部分。
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2021-06-06
相关资源
最近更新 更多