如何通过php mysql查询获取javascript中的数据

时间:2011-06-07 07:13:09

标签: php javascript jquery json

我想在一个选择框中显示700个产品数据,每个选择我必须打印一个描述表。在我做ajax调用并显示数据之前,但进程很慢。所以我必须将所有数据发送到客户端,然后使用javascript更改选项更改的描述表。以下是我的代码

   <?php
     $data = json_encode( get_data_from_db() );
    ?>

<input type='hidden' name='data' id='data' value= " <?php echo $data; ?>" />

当我在jquery中发出警报时

 alert( $("#data").val() );

我只看到

  

{[

警报中的

值,但是当我在浏览器上打印数据时,它确实以json格式打印。

我怎样才能在javascript中获取这些数据,然后我必须使用循环来提取针对特定id的数据,并将其从中删除然后嵌入它。请建议正确的方法,警告有什么不对。感谢

6 个答案:

答案 0 :(得分:2)

另一种解决方案 - 不是创建全局变量,而是将该数据设置为某些相关元素的data-属性。不要忘记在整个数组/对象上执行json_encode(),然后在结果字符串上执行htmlspecialchars()(正如其他人所指出的那样,缺少htmlspecialchars()就是为什么你只有“{[”当警告输入字段的值时)。在调用ENT_QUOTES时,请不要忘记指定htmlspecialchars(),否则如果任何值包含撇号字符,则结果可能无效。

<?php
    $users = array(
        array('name' => 'Average', 'surname' => 'Joe'),
        array('name' => 'Average', 'surname' => 'Jane'),
        array('name' => 'Joe', 'surname' => 'Sixpack'),
        array('name' => 'John', 'surname' => 'Doe'),
        array('name' => 'Hong', 'surname' => 'Gildong'),
        array('name' => 'Foo', 'surname' => 'Bar'),
    );
?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
    <title>sandbox</title>
    <meta http-equiv='content-type' content='text/html; charset=UTF-8'/>
    <script type='text/javascript' src='js/jquery-1.6.1.min.js'></script>
</head>
<body data-users='<?php echo htmlspecialchars(json_encode($users), ENT_QUOTES); ?>'>
    <script type='text/javascript'>
        $(function() {
            var users = $(document.body).data('users');
            for ( var n in users ) {
                $('<div/>').text(users[n].name + ' ' + users[n].surname).appendTo(document.body);
            }
        });
    </script>
</body>
</html>

这使得6个<div/>元素的所有名称和姓氏都作为其内容。

答案 1 :(得分:1)

您遇到的问题是您在value属性周围使用双引号,但当然JSON输出中的所有键和字符串都是双引号,第一个终止{{ 1}} HTML中的属性。

不要输出value作为隐藏元素的值。而是将其输出到JavaScript变量:

$data

然后,您可以直接在JavaScript中使用<script> var products_data = <?php echo $data; ?>; </script> 。 (如图所示,它是一个全局变量,这不是理想的;如果你可以在一个范围函数中包含它,那会更好,但这取决于你的脚本等组织方式。)

这是有效的,因为JSON是JavaScript对象文字格式的子集,因此有效的JSON也是用于定义内联对象的有效JavaScript。您的PHP将生成类似的内容并将其发送到浏览器:

products_data

显然,确切的结构将取决于您的服务器端<script> var products_data = { "products": [ {"id": 427, "name": "WonderWidget", "price": 27.99}, {"id": 429, "name": "CoolNiftyThing", "price": 19.99} ] }; </script> 对象。

答案 2 :(得分:0)

原因是json编码数组的格式是这样的:{[ "value1","value2",...]},所以,当你echo“value”字段中的字符串时,json中的第一个双引号 string关闭隐藏输入的value属性

解决问题你可以做点什么

<script>
var myData = <?php echo json_encode( get_data_from_db() ); ?> 
</script>

答案 3 :(得分:0)

@ T.J。克劳德对你的钱有你的答案。

您在发布的示例中看到奇怪行为的原因可能是因为您的json_encode在早期有双引号,并且在注入标记属性而没有转义字符时它正在炸毁dom

答案 4 :(得分:0)

这样做的最佳方式是不会直接将JSON结构回显到脚本中(这可以打开您htmlspecialchars可能无法保护您的XSS问题。)

我建议您执行以下操作:

<script type="text/plain" id="json_data">
    <?php echo html_special_chars(json_encode($data)); ?>
</script>

<script>
    var myData = $.parseJSON($("#json_data").text());
</script>

JSON 不是 Javascript,不应该这样对待。

答案 5 :(得分:-2)

不是 val(); 使用 text();

alert($("#data").text());