2015-11-19 2 views
1

я пытаюсь использовать json_encode так, что моя функция JQuery Ajax может извлекать данные из моего PHP скрипт, однако массив, который я пытаюсь кодировать и получить массив объектовJQuery AJAX получения массива объектов

$la_uselessinfo = array(); 
$lv_cnt = 0; 

$uselessinfo = pg_execute($gv_dbconn, "uselessinfo_cur", array()); 
while($la_row = pg_fetch_row($uselessinfo)) { 

    $la_uselessinfo[$lv_cnt]["uinf_idno"] = $la_row[0]; 
    $la_uselessinfo[$lv_cnt]["uinf_desc"] = $la_row[1]; 
    $lv_cnt = $lv_cnt + 1; 

} 

echo json_encode($la_uselessinfo); 

Я пытаюсь получить это с помощью функции JQuery Ajax

$.ajax({ 
    url  : 'scripts/phpfunctions.php', 
    type : 'GET', 
    data : {'action':'sel_uselessinfo'}, 
    success : function(data) { 
        //console.log(data); 
        console.log(data["uinf_desc"][0]); 
       }, 
    error : function(log) { 
        console.log(log.message); 
       } 
}); 

Я получаю следующее сообщение об ошибке

Uncaught TypeError: Cannot read property '0' of undefined 

Я не могу сказать, не так ли это в PHP-коде или коде jquery, каков правильный способ извлечения массива объектов?

+0

У вас есть еще один параметр 'parse'. вы отправляете его как '[$ lv_cnt] [" uinf_idno "]' right? –

+0

Вам нужно разобрать ответ как 'JSON.parse (data)' – Rayon

+1

Где вы делаете 'json_encode (array ($ la_uselessinfo));' вы уверены, что вам действительно не нужно 'json_encode ($ la_uselessinfo);'? '$ la_uselessinfo' уже является массивом, не нужно его снова обертывать, и это приводит к неправильной оценке глубины вашего массива. – DelightedD0D

ответ

1

Изменение РНР:

$la_uselessinfo = array(); 
$lv_cnt = 0; 

$uselessinfo = pg_execute($gv_dbconn, "uselessinfo_cur", array()); 
while($la_row = pg_fetch_row($uselessinfo)) { 

    $la_uselessinfo[$lv_cnt]["uinf_idno"] = $la_row[0]; 
    $la_uselessinfo[$lv_cnt]["uinf_desc"] = $la_row[1]; 
    $lv_cnt = $lv_cnt + 1; 

} 

echo json_encode($la_uselessinfo); //$la_uselessinfo is already an array, no need to wrap it again, and doing so causes you to misjudge the depth of your array 

Затем измените ваш JQuery на:

$.ajax({ 
    url  : 'scripts/phpfunctions.php', 
    type : 'GET', 
    data : {'action':'sel_uselessinfo'}, 
    success : function(data) { 
        //console.log(data); 
        console.log(data[0]["uinf_desc"]); // this line changed 
       }, 
    error : function(log) { 
        console.log(log.message); 
       } 
}); 

Чтобы перебрать ваши результаты сделать это:

// sample data 
 
var data = [{ 
 
    "uinf_idno": "1", 
 
    "uinf_desc": "website db " 
 
}, { 
 
    "uinf_idno": "2", 
 
    "uinf_desc": "local apache " 
 
}] 
 

 

 

 
$.each(data,function(i,e){ 
 
     var uinf_idno = e.uinf_idno; 
 
     var uinf_desc = e.uinf_desc; 
 
     
 
     $('#result').append('uinf_idno= '+uinf_idno+' and uinf_desc= '+uinf_desc+' <br>'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="result"></div>

+0

Это идеальное и очень indepth – Trent

1
$.ajax({ 
    url  : 'scripts/phpfunctions.php', 
    type : 'GET', 
    data : {'action':'sel_uselessinfo'}, 
    dataType: "json", 
    success : function(data) { 
        console.log(data[0]["uinf_desc"]); 
        console.log(data[0]["uinf_desc"]); 
       }, 

Это должно быть data[0]["uinf_desc"] как написано в вашем PHP

+0

Почему downvote? Позаботьтесь об этом? – void

+0

Я не был downvoter, но, возможно, потому, что теперь это будет работать с редактированием OP, но до того, как они отредактировали, это должно было быть 'data [0] [0] [" uinf_desc "]' – DelightedD0D

+0

Это будет просто ' data [0] ["uinf_desc"] ' – void

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