【问题标题】:Passing mixed data type array from php to javascript array将混合数据类型数组从 php 传递到 javascript 数组
【发布时间】:2014-10-04 15:46:43
【问题描述】:

这接近于典型的异步/getJSON 主题。我似乎无法让我的工作......我正在从 mySQL 数据库中加载一个 php 文件“loadblocks.php”中的数组,并通过运行页面并执行 echo json_encode($内容);。所有数据都 100% 完美地打印到浏览器。但是,当我在 Javascript 中调用 json 数据时......一旦我点击带有我的 onclick 事件的链接,页面就没有响应。

<?php               
$con=mysqli_connect("localhost","root","password","swim");
// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM blocks");    
$content = array();     // initialize block viewer array    

if($result){
    while($row = mysqli_fetch_assoc($result)) {
        $content[$row["id"]] = $row;        // "id" is primary key id's
    }
}
echo json_encode($content);  // return array (validated)

mysqli_close($con);
?>

然后我的 HTML 文件中有以下内容...我需要从 mySQL 数据库加载这个“块”数据的多维数组。本质上,我需要在打开此“块查看器”html/javascript 页面时执行此操作,并将 php 变量“$content”中的所有数据读取到多维数组中每一行的文字“块”中。每行包含一种教育课程要求、照片链接等...我的 HTML/jscript 如下:

<html>

<head>
<script>
    function loadblocks() {
      $("#selectable").selectable({
        disabled: true
      }); // disable selectable while re-loading blocks in "selectable" viewer
      $.getJSON('loadblocks.php', data, function(jsonarray) {
        // store jsonarray once it is loaded in here
        blockarray = jsonarray;
        // in MySQL each row = (id, blocktype, title, description, imgurl, img2url, img3url, vidurl, goal1, goal2, goal3)
        // Thus index #3 in each row is the "title" we will load in each box for now
        // todo - create loop to load all rows
        document.getElementById("selectable").innerHTML += "<li class='ui-state-default'>" + blockarray[0][3] + "</li>";
      })
      $(".selectable").selectable({disabled: false}); // re-enable
    }
  </script>
</head>

<body>

  <table class="floatboxstyle" style="width:675px; height:225px;">
    <tr>
      <td>
        <ol id="selectable">
          <li class="ui-state-default">Sample block</li>
        </ol>
      </td>
    </tr>
  </table>
  <button onclick="loadblocks()">Load Blocks</button>

  <br>

  <p id="feedback">
    <span>You've selected:</span>  <span id="select-result">none</span>
  </p>

</body>
</html>

【问题讨论】:

  • 调用getJson时不需要解析JSON。它知道它是 json 并相应地解析它。
  • 更新的 HTML 代码.... 仍然无法正常工作。这更像是我的实际“阻止”查看页面的粗略草图

标签: javascript php mysql json getjson


【解决方案1】:

您不必使用parseJSON 作为响应,jsonData 应该已经是一个 JavaScript 对象,实际上这应该是一个错误,虽然我通常使用 JSON.parse 所以我不确定是否parseJSON 爆炸与否。我没有看到你在这段代码中对blockarray 做任何事情。而且您没有用于报告问题的错误处理程序,请尝试添加一个。

成功回调传递返回的数据,该数据通常是由 JSON 结构定义并使用 $.parseJSON() 方法解析的 JavaScript 对象或数组。它还传递了响应的文本状态。[1]

[1]http://api.jquery.com/jQuery.getJSON/

虽然您可能会在浏览器中看到 JSON 打印,但它可能不是有效的 JSON,在这种情况下它会静默失败。

从 jQuery 1.4 开始,如果 JSON 文件包含语法错误,请求通常会静默失败。因此,请避免频繁手动编辑 JSON 数据。

尝试验证您的 JSON 以确保它确实有效,尽管我假设 json_encode 会为您做到这一点。

【讨论】:

  • 我认为我应该在我的 json 行周围使用这个“try/catch”错误报告功能。现在,即使是上述情况也导致按钮按下功能无声无息地死掉......今晚晚些时候将不得不尝试这个错误处理。我的完整代码是提取用户选择的一组块(这个 mySQL 表的一列有 #1-5 选项用于运动训练计划设计者的块“组”)并在我的行中显示图像 url 字符串在列表中如果用户选择该组块,则选项。 (例如:#1 = 生物力学技能,#2 = 生理训练方法等)。到目前为止谢谢!
  • 这并没有帮助。使用 try{} 和 catch{} 未返回任何错误
  • 如果你有错误,你就不需要try catch,它就会出现。如文档所述,如果出现 JSON 错误,请求会静默失败。但我怀疑这是一个 JSON 错误,我不知道它是什么。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
相关资源
最近更新 更多