Json解析并添加格式

时间:2013-02-16 13:09:57

标签: php ajax json

我在函数中使用它:

$.ajax({
     type: 'POST',
     url: 'demopost.php',
     data: { ... },
     dataType: 'json',
     success: function(data) 
     {
            console.log(data);
     }
  });

demopost.php只包含一个查询。

输出将是:

enter image description here

但我如何在div中显示它?或者如何添加一些形式,例如与foreach一样的php数组?

编辑: 我尝试了它(console.log(数据)的地方:

$('.inner').append(data);

当然有一个内心阶级的div。但没有显示

EDIT2: demopost.php中的查询:

   ... try
        {
            $c_id = htmlspecialchars($_POST['cid']);
            $leftprice = $_POST['left'];
            $rightprice = $_POST['right'];
            $items=$main->pdo->prepare("SELECT name, price FROM clf_items WHERE category_id IN (
                SELECT node.id
                FROM clf_category AS node,
                clf_category AS parent
                WHERE node.lft BETWEEN parent.lft AND parent.rgt AND price BETWEEN :left AND :right
                AND parent.id = :c_id)");
            $items->execute(array(':c_id' => $c_id, ':left' => $leftprice, ':right' => $rightprice));
            $items_array = array(); 

            while ($row = $items->fetch(PDO::FETCH_ASSOC))
            {
                $items_array[] = $row; 
            }
        echo json_encode($items_array);exit;
        }...

3 个答案:

答案 0 :(得分:2)

你在这里做的是从服务器返回一些可以通过javascript读取的JSON数据,但没有一些处理就没有用到推送到HTML中。

一种解决方案是获取您收到的JSON数组,并在将其推送到页面之前将其转换为HTML字符串。这可能看起来像:

 success: function(data) 
 {
     var result = '<table>';
     for (i=0; i<data.length; i++) {
         result += '<tr><td>'+ data[i].name+'</td><td>'+data[i].price+'</td></tr>';
     }
     result+= '</table>';
     $(".inner").html(result);
 }

现在这没有钱格式化,没有html转义,非常粗糙的布局等pp。在你尝试将这个原始草图变成有用的东西之前,我建议你查看可用于jQuery的各种模板引擎;这篇文章中列出了一些:jQuery Templates are deprecated?(与问题不同,jQuery模板并没有死,但有一些竞争)。

但是我更喜欢另一种方法:创建HTML服务器端(而不是JSON),因此返回HTML代码段的方式与通常在PHP中返回完整HTML页面的方式相同,并且在ajax请求中表示您需要HTML :dataType: 'html',然后您可以将结果直接推送到$(".inner").html(data)(或$(".inner").append(data),不知道您的HTML应该如何显示),就像您最初想要的那样。

我想这与schwierig想说的相同,但我觉得有必要更明确地说出来。

答案 1 :(得分:1)

如果您不处理正在发送的数据,您使用Ajax的原因是什么?如果你只想格式化数据,那么你真的不需要PHP来做这件事。

当然有可能。如果要使用PHP进行处理,则需要回显格式化结果并使用jQuery API中描述的.done()函数

http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:0)

$.post('demopost.php',{..}, function(data) {
  $('.inner').html(data);
});

尝试这个希望它会有所帮助,并确保你有内部类的div