$ .each()循环遍历json而不循环

时间:2014-09-20 22:16:21

标签: php jquery ajax json

我有一个回复json的ajax调用我正在尝试将返回的项目发送到特定的输入文本ID#s。

这是ajax:

$.ajax({
    url: "php/myfirstfile.php",
    type: "POST",
    data: $("#frameroof").serialize(),
    cache: false,
    dataType: "json",
    success: function (json) {
        $.each(json, function () {
            $.each(json, function (key, value) {
                /// do stuff
                $('#' + key ).val(value);
            });
        });
    }
});

这是返回的内容:[{"a-frame":"100"}][{"vertical":"350"}]

当我需要一个循环时,它看起来我得到2个数组。我不确定。

这是php

if(isset($_POST["cart"])){
    $frameArray = ($_POST["cart"]);

    if(is_array($frameArray)){
        foreach($frameArray as $row){
            $catalogue = $row['catalogue'];
            $certification = $row['certification'];
            $catagory =  $row['catagory'];
            $subcatagory =  $row['subcatagory'];
            $length = $row['length'] ;

            $sql = "SELECT `price` AS  '$subcatagory' FROM `products` WHERE `catalogue_id` = '$catalogue' AND  `certification` = '$certification' AND `catagory` = '$catagory' AND  `sub_catagory` = '$subcatagory' AND `length` = '$length' ";

            $result = $short_connect->query($sql);

            if (($result) && ($result->num_rows > 0)) {
                $results = array();
                //convert query result into an associative array
                while ($row = $result->fetch_assoc()) {
                    $results[] =  $row;
                }

                //dump all data from associative array converted from query result
                echo (json_encode($results,true));

                $result->free();
            }
        }
    }
}

$short_connect->close();

1 个答案:

答案 0 :(得分:0)

我相信你的问题非常简单。在循环内部,您正在初始化结果数组,并且您正在输出它。这会导致创建一个新的结果数组,序列化为JSON,并在循环的每次迭代时输出。因此,您发送浏览器的不是JSON,而是几个JSON块都在一起运行。

这是您需要做的基本想法:

<?php
// Initialize the output data
$results = array();

foreach($something as $a_something) {
    $results[] = do_something_to($a_something);
}

//Serialize and send the output data
echo (json_encode($results,true));

使用该模式重新排列代码会产生这种情况(这应该对您有用,并且如果不满足if条件或者查询没有返回任何内容,则会向浏览器返回一个空数组):

<?php

// Initialize the output data
$results = array();

if(isset($_POST["cart"])){
    $frameArray = ($_POST["cart"]);

    if(is_array($frameArray)){
        foreach($frameArray as $row){
            $catalogue = $row['catalogue'];
            $certification = $row['certification'];
            $catagory =  $row['catagory'];
            $subcatagory =  $row['subcatagory'];
            $length = $row['length'] ;

            $sql = "SELECT `price` AS  '$subcatagory' FROM `products` WHERE `catalogue_id` = '$catalogue' AND  `certification` = '$certification' AND `catagory` = '$catagory' AND  `sub_catagory` = '$subcatagory' AND `length` = '$length' ";

            $result = $short_connect->query($sql);

            if (($result) && ($result->num_rows > 0)) {
                //convert query result into an associative array
                while ($row = $result->fetch_assoc()) {
                    //Add to the output data
                    $results[] =  $row;
                }

                $result->free();
            }
        }
    }
}

$short_connect->close();

//Serialize and send the output data
//dump all data from associative array converted from query result
echo (json_encode($results,true));