2015-06-22 77 views
1

我想获取数据以在表中显示。我不知道我在做什么错,但是当我从我的页面获取数据时,它是一个单个字符的数组。我可以自己解析,但宁愿知道我做错了什么。从json转换为数组

我有这个PHP来获得数据:

function BuildViewerCombo($autocomplete) { 

    $wholeNumberCombo = array(); 
    $dbhandle = DB_Connect();  

    $result = QueryForward($dbhandle, SQL_WholeNumbersPartial($autocomplete)); 

    while($wholeNumber = sqlsrv_fetch_array($result)) 
     { 
      $wholeNumberCombo[] = array($wholeNumber['DocumentNbr'] => 'Number', $wholeNumber['DocumentRevision'] => 'Revision'); 
     } 


    //close the connection 
    sqlsrv_close($dbhandle); 

    return $wholeNumberCombo; 
} 

这是从这个页面

<?PHP 
    include "Scripts/DB_Functions.php5" ; 
    include "Scripts/SQL_Viewer.php5" ; 

    $wholeNumber = $_GET['wholeNumber']; 
    echo json_encode(BuildViewerCombo($wholeNumber)); 
?> 

后者从这个函数

function toggleDropdown() 
    {   

     var wholeNumberData 


     var wholeNumber = document.getElementById('WholeNumber').value; 

     if (wholeNumber != '') { 
      wholeNumberData = GetData('wholeNumber', wholeNumber); 

      var table = document.getElementById("wholeNumberDropdown"); 

      alert ('WN = ' + wholeNumberData.length); 
      alert (wholeNumberData); 
      for (var i in wholeNumberData) { 
       alert(wholeNumberData[i]); 
      } 

      } 
     else { 
      alert("Please enter a whole number."); 
     } 

    } 

加载称为通过调用这个函数:

function GetData(getType, param) { 

    var http = new XMLHttpRequest(); 

    http.open("GET", 'ViewerWholeNumbers.php?wholeNumber=' + param, false); 
    http.setRequestHeader("Content-type","application/json"); 
    http.onload = function() { 
    } 
    http.send('wholeNumber=' + param); 
    return http.responseText; 
} 

被返回的数据是:

[{"SS3999":"Number","A":"Revision"},{"SS3999":"Number","11":"Revision"}, 
{"SS3999":"Number","11":"Revision"},{"SS3999":"Number","11":"Revision"}, 
{"SS3999":"Number","":"Revision"},{"SS3999":"Number","11":"Revision"}, 
{"SS3999":"Number","":"Revision"},{"SS3999":"Number","11":"Revision"}, 
{"SS3999":"Number","11":"Revision"},{"SS3999":"Number","A":"Revision"}, 
{"SS3999":"Number","11":"Revision"},{"SS3999":"Number","A":"Revision"}, 
{"SS3999":"Number","11":"Revision"},{"SS3999":"Number","A":"Revision"}, 
{"SS3999":"Number","":"Revision"}] 

alert ('WN = ' + wholeNumberData.length);返回546,当我通过数组尝试循环,我得到一个字符的每一个元素,而不是值。

+0

你可以使用json_decode()函数,它是转换JSON到数组 –

+0

是的,我同意,http://php.net/manual/en/function.json- decode.php –

+0

返回的数据是颠倒的。它应该是{“数字”:“SS3999”...而不是其他方式 – drinovc

回答

3

首先,您的关联数组被翻转。您需要更改

array($wholeNumber['DocumentNbr'] => 'Number', $wholeNumber['DocumentRevision'] => 'Revision'); 

array('Number' => $wholeNumber['DocumentNbr'], 'Revision' => $wholeNumber['DocumentRevision']); 

需要,为了访问JSON的元素。然后,在您的循环中,您将使用wholeNumberData[i].Number获取编号,并使用wholeNumberData[i].Revision获取修订。

更新

由于@jeroen指出的那样,你需要JSON.parse()到返回字符串转换成JSON。在你GetData功能与此更换你的return

return JSON.parse(http.responseText); 
+0

谢谢,我翻了翻。然而,当我尝试访问如下这样的成员时,我得到'undefined':alert('Number ='+ wholeNumberData [1] .Number); – Joe

+0

@Joe看看我更新的答案。 – imtheman