0

来自 Adob​​e Flex,我习惯于在 ArrayCollection 中提供数据,当我想显示所选项目的数据时,我可以使用 sourcedata.getItemAt(x) 之类的东西,它为我提供了从该索引返回的所有数据。

现在在 php 和 javascript 中工作我正在寻找当用户单击一行数据时(在行上带有 onClick 的表中,以便能够查看我的数据变量 $results,然后使用来自的值填充文本输入那行。我的问题是我不知道如何使用 javascript 来查看包含我所有数据的变量,然后根据索引或匹配变量(例如主键)拉出一行。

有人知道怎么做吗。当我可以在原始拉取中提供数据时,最好不要触发“读取”查询,以免再次冲击 mySQL 服务器。

谢谢!

4

4 回答 4

1

我会发出一个大的 AJAX/JSON 请求并通过 JavaScript 修改给定的数据。

下面的代码是一个实际请求的示例。JS 使用 jQuery,以便更轻松地管理 JSON 结果。容器对象可以用一些方法来扩展,用于将结果对象输入到表中等等。

PHP:

$result = array();
$r = mysql_query("SELECT * FROM table WHERE quantifier = 'this_section'");
while($row = mysql_fetch_assoc($r))
  $result[$row['id']] = $row;
echo json_encode($result);

JavaScript + jQuery:

container.result = {};
container.doStuff = function () {
  // do something with the this.result
  console.debug(this.result[0]);
}

// asynchronus request
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: function(result){
    container.result = result;
  }
});
于 2012-09-30T20:18:17.737 回答
1

这是一个很好的问题!AJAXy 的概念在概念上非常简单,但是当您使用 vanilla 代码时,有很多似乎无法填补的漏洞。

您需要做的第一件事是在 HTML 中识别表格中的每一行。这是一个简单的方法:

<tr class="tablerow" id="row-<?= $row->id ">
  <td><input type="text" class="rowinput" /></td>
</tr>

我还给了该行一个非唯一的tablerow. 现在给他们一些行动!我在这里使用 jQuery,它将为我们完成所有繁重的工作。

<script type="text/javascript">
$(function(){
  $('.tablerow').click(function(){
    var row_id = $(this).attr('id').replace('row-','');

    $.getJSON('script.php', {id: row_id}, function(rs){
      if (rs.id && rs.data) {
        $('#row-' + rs.id).find('.rowinput').val(rs.data);
      }
    });
  });
});
</script>

然后script.php你会想做这样的事情:

$id = (int) $_GET['id'];
$rs = mysql_query("SELECT data FROM table WHERE id = '$id' LIMIT 1");
if ($rs && mysql_num_rows($rs)) {
  print json_encode(mysql_fetch_array($rs, MYSQL_ASSOC));
}
于 2012-09-30T20:20:35.103 回答
0

也许你可以给每一行一个单选按钮。您可以使用 JavaScript 触发对单选按钮组中的选择的操作。稍后,当一切正常时,您可以使用 CSS 隐藏实际的单选按钮并使整行成为标签,这意味着单击该行将有效地单击单选按钮。这样,它也可以访问,因为有一个动作输入元素,你只是隐藏它。

于 2012-09-30T20:06:53.103 回答
0

我只是将数据库字段名称存储在td元素中(嗯......一个稍微不同的字段名称,因为没有理由将生产数据库字段名称公开给任何关心查看页面源的人),然后使用dataset属性提取它.

或者,您可以只设置一个class属性。

你的 PHP 看起来像:

<tr>
  <td data-name="<?=echo "FavoriteColor"?>"></td>
</tr>

或者

<tr>
  <td class="<?=echo "FavoriteColor"?>"></td>
</tr>

javascript看起来有点像:

    var Test;
    if (!Test) {
        Test = {
        };
    }
    (function () {
        Test.trClick = function (e) {
            var tdCollection,
                i,
                field = 'FavoriteColor',
                div = document.createElement('div');
            tdCollection = this.getElementsByTagName('td');
            div.innerText = function () {
                var data;
                for (i = 0; i < tdCollection.length; i += 1) {
                    if (tdCollection[i].dataset['name'] === field) { // or tdCollection[i].className.indexOf(field) > -1
                        data = tdCollection[i].innerText;
                        return data;
                    }
                }
            }();
            document.body.appendChild(div);
        };
        Test.addClicker = function () {
            var table = document.getElementById('myQueryRenderedAsTable'),
                i;
            for (i = 0; i < table.tBodies[0].children.length; i += 1) {
                table.tBodies[0].children[i].onclick = Test.trClick;
            }
        };
        Test.addClicker();
    }());

处理数据集:http: //jsfiddle.net/R5eVa/1/

与类工作小提琴:http: //jsfiddle.net/R5eVa/2/

于 2012-09-30T23:09:41.140 回答