如何以所需的json格式从php获取数据到我的jquery脚本?

时间:2015-10-19 22:08:27

标签: javascript php jquery json

我有一个查询Select name, age from users,我希望它以特定格式将内容返回给jquery:

var externalDataRetrievedFromServer = [
    { name: 'Bartek', age: 34 },
    { name: 'John', age: 27 },
    { name: 'Elizabeth', age: 30 },
];

到目前为止我在PHP方面有:

$fetch = "SELECT name, age from users";
$result = $mysqli->query($fetch);
$data = array();    
$data = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $data );

在jquery网站上我有:

 $.ajax({
            url: './getJson.php', 
            type: "POST",
            data: {
                users: users
            },
            dataType:'text',
            success: function(ans)
            {

                alert(ans);

但它以格式返回数据:

[{"name":"Bartek","age":"34"},{"name":"John","age":"27"},{"name":"Elizabeth","age":"30"}]  

我需要在帖子开头提到的特定格式,因为现在我的当前逻辑(我不想更改)会在此行中引发错误:data.forEach is not a function

function buildTableBody(data, columns) {
        var body = [];

        body.push(columns);

        data.forEach(function(row) {
            var dataRow = [];

            columns.forEach(function(column) {
                dataRow.push(row[column].toString());
            })

            body.push(dataRow);
        });

        return body;
    }

其中data是我现在使用的格式的数据。那么我该如何更改格式呢?

这里有一些细节:

我在这里使用buildTableBody():

function table(data, columns) {
            return {
                table: {
                    headerRows: 1,
                    body: buildTableBody(data, columns)
                }
            };
        }

但是,当我将数据类型从text更改为json时,我收到错误:

Uncaught TypeError: Cannot read property 'toString' of undefined

来自方法buildTableBody

当我现在alert(ans)时,我得到了:

[object Object],[object Object],[object Object]

你有什么线索我该怎么办?

----另一个编辑:

这正是我想要实现的目标:

var externalDataRetrievedFromServer = [     {姓名:'Bartek',年龄:34},     {姓名:'约翰',年龄:27},     {姓名:'伊丽莎白',年龄:30}, ];

function buildTableBody(data,columns){     var body = [];

body.push(columns);

data.forEach(function(row) {
    var dataRow = [];

    columns.forEach(function(column) {
        dataRow.push(row[column].toString());
    })

    body.push(dataRow);
});

return body;

}

函数表(数据,列){     返回{         表:{             headerRows:1,             body:buildTableBody(数据,列)         }     }; }

var dd = {     内容:[         {text:'Dynamic parts',style:'header'},         table(externalDataRetrievedFromServer,['name','age'])     ] }

2 个答案:

答案 0 :(得分:1)

您正在设置dataType:'text',因此响应将作为字符串返回到success回调。

由于没有String.prototype.forEach()您收到错误

更改为dataType:'json',jQuery将在内部解析对数组的响应。

没有显示您致电buildTableBody()以便能够进一步协助

的地方

答案 1 :(得分:1)

forEach表示行,$ .each表示列。

DEMO HERE:http://jsfiddle.net/0cc3bgp2/

var x = '[{"name":"Bartek","age":"34"},{"name":"John","age":"27"},{"name":"Elizabeth","age":"30"}]';

var rows = $.parseJSON(x);

rows.forEach(function(row) {

    var dataRow = [];

    $.each(row, function(index, value) {
      dataRow.push(value);
    });

    //body.push(dataRow);
    console.log(dataRow);
});

// WILL LOG:
//
// ["Bartek", "34"]
// ["John", "27"]
// ["Elizabeth", "30"]