【问题标题】:how can I fetch data from php to my jquery script in a desired json format?如何以所需的 json 格式从 php 获取数据到我的 jquery 脚本?
【发布时间】:2016-01-18 09:54:02
【问题描述】:

我有一个查询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 in this line:

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 }, ];

函数 buildTableBody(数据,列){ 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;

}

函数表(数据,列){ 返回 { 桌子: { 标题行:1, 正文:buildTableBody(数据,列) } }; }

var dd = { 内容: [ { text: '动态部分', style: 'header' }, 表(externalDataRetrievedFromServer,['name','age']) ] }

【问题讨论】:

  • 这是一个快速的技巧,但您可以在 $data 上使用 str_replace 来交换 : 和 , 周围。

标签: javascript php jquery json


【解决方案1】:

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

在这里演示: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"]

【讨论】:

  • @charlietfl OP 说“因为现在我当前的逻辑(我不想更改)给我一个错误:data.forEach 不是这一行中的函数”。我指出什么可以用 forEach 解析,什么可以用 $.each 解析。此外,这是在 OP 编辑​​之前。
【解决方案2】:

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

由于没有String.prototype.forEach(),你会得到一个错误

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

未显示您致电buildTableBody() 以提供进一步帮助的位置

【讨论】:

  • 感谢您的快速回复!你能检查我更新的问题吗?
  • 还是未知数,columns 来自哪里?未显示函数 table() 的调用位置
  • 抱歉之前没提过!我在这里使用了这个帖子github.com/bpampuch/pdfmake/issues/24 的答案,由bpampuch 编写的代码——对我来说这对你有帮助吗?
  • 没有兴趣阅读所有内容......问题应该包含所有相关代码
猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 2017-10-07
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多