我有一个查询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']) ] }
答案 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"]