2015-06-22 4 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

Возвращенные данные перевернуты вверх ногами. Это должно быть {"Number": "SS3999" ... а не наоборот – drinovc

ответ

3

Прежде всего, ваш ассоциативный массив перевернут. Вам нужно изменить

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

в

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

Вам нужно, что для того, чтобы получить доступ к элементам JSON. Затем в вашем цикле вы должны использовать wholeNumberData[i].Number, чтобы получить номер и wholeNumberData[i].Revision, чтобы получить ревизию.

Update:

@jeroen Как указал, что вам нужно, чтобы преобразовать JSON.parse() возвращаемой строки в формате JSON. В вашей GetData функции заменить ваш return с этим:

return JSON.parse(http.responseText); 
функция
+0

Спасибо, я перевернул его. Однако при попытке доступа к члену я получаю «неопределенный»: alert ('Number =' + wholeNumberData [1] .Number); – Joe

+0

@Joe Ознакомьтесь с моим обновленным ответом. – imtheman

Смежные вопросы