2015-10-19 48 views
0

我有一個查詢Select name, age from users,我希望它的內容將jQuery與特定的格式返回:我怎樣才能獲取數據從PHP到我的jQuery腳本所需的JSON格式?

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

其中數據是我現在擁有的格式的數據。那麼我怎樣才能改變格式呢?


多一點點的細節在這裏:

我使用buildTableBody()位置:

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

然而,當我從文字到JSON改變了數據類型,我越來越錯誤:

Uncaught TypeError: Cannot read property 'toString' of undefined 

來自方法buildTableBody

當我做alert(ans)現在,我越來越:

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

你有,我怎麼能解決這個問題的線索?

----另一個編輯:

這正是我想達到的目標:

VAR externalDataRetrievedFromServer = [ {名稱: '鮑爾泰克',年齡: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, 體:buildTableBody(數據列) } }; }

變種DD = { 內容:[ {文本: '動態份',樣式: '標題'}, 表(externalDataRetrievedFromServer,[ '名稱', '年齡']) ] }

+0

這是一個快速的技巧,但你可以在$使用str_replace函數的數據交換:與周圍。 – Coz

回答

1

的forEach爲行,$。每對列。

DEMO的位置: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"] 
+0

@charlietfl OP說「因爲現在我現在的邏輯(我不想改變)拋出一個錯誤:data.forEach不是這行中的函數「。我指出了可以使用forEach進行解析的內容以及$ .each的內容。此外,這是在OP的編輯之前。 –

1

您正在設置dataType:'text',因此響應將作爲字符串返回到success回調。

由於沒有String.prototype.forEach()你得到一個錯誤

更改爲dataType:'json'和jQuery將在內部解析到陣列的響應。

它沒有顯示在您調用buildTableBody()能夠幫助任何進一步

+0

感謝您的快速響應!你能檢查我更新的問題嗎? – randomuser1

+0

還是未知數,'columns'從哪裏來?不顯示調用函數table()的位置 – charlietfl

+0

對不起,以前沒有提及它!我正在使用這個帖子的答案https://github.com/bpampuch/pdfmake/issues/24這裏,由bpampuch寫的代碼 - 對我來說對你有幫助嗎? – randomuser1