Ajax返回一个字符串而不是数组

时间:2017-03-06 21:03:44

标签: php jquery ajax

之前我通过执行以下操作成功访问了回调jquery ajax函数中的php数组:

$.post('ajax.php', {name: name}, function(data) {

                var obj = jQuery.parseJSON(data);

                var item = obj[6]

使用php:

$sql = "SELECT * FROM sales WHERE email = 'test' AND item = '$name' ";
$result = mysqli_query($conn, $sql);

    if ($result){
                    $row = mysqli_fetch_array($result);
                    echo json_encode($row);
                    }

我现在有一个稍微不同的情况,我不会想到这个问题,但非常多:

PHP

$sql = "SELECT * FROM sales WHERE ".$searchwithin." BETWEEN '2017-02-01' AND     '2017-03-01'";

$result = mysqli_query($conn, $sql);
    if ($result){   
                    while ($row = mysqli_fetch_assoc($result)){

                    echo json_encode($row);
                    }

当我执行以下Jquery时:

 var obj = data.length;

 alert(obj);

我得到一个可笑的高数字,它告诉我它是字符串长度而不是数组长度;所以我猜这是第一个问题,尽管看似复制成功的过去ajax,我现在得到一个字符串返回而不是数组。

最后,我猜这与第一个问题有关,每当我使用

var obj = jQuery.parseJSON(data);

它根本不喜欢它;我要么什么也得不到,甚至没有警报,或者我确实收到了“未定义”的警报。

该数组应包含八个左右的mysqli表行,其中包含十五列;我相信我然后可以使用例如OBJ [5] [7]。但我还不能尝试,因为它返回一个字符串,似乎不是一个数组。顺便提一下,我是新手,并提前致谢。

哦,如果我只是做警报(数据),这就是我得到的:

{“id”:“8”,等等}

1 个答案:

答案 0 :(得分:1)

当您在循环中解码ajax时,您有许多对象而不是一个。你的ajax会得到类似{some rom} {some row1} {some row2}

的回复

你需要创建数组并将数据循环插入其中,并解码它的数组

$myArray = array();
if ($result = $mysqli->query("SELECT * FROM phase1")) {

    while($row = $result->fetch_array(MYSQL_ASSOC)) {
            $myArray[] = $row;
    }
    echo json_encode($myArray);
}