Jump to content
  • 0

Как разобрать результаты Sql запроса в Javascript


Avalon4eg
 Share

Question

Доброго времени суток!

такая вот задача

есть Javascript функция она отправляет ajax запрос в результате которого должна получить результат запроса в базу от такого кода


$v = $_REQUEST['param']
$sql = "SELECT `id`,`name` FROM `users` WHERE `city` = '$v'";
$result = mysql_query($sql);
$s = mysql_fetch_array($result);
$obj = $s;
echo json_encode($obj);

массив то я получаю а вот как разобрать его я не пойму

нашел такой вот код


for(var key in obj){
var val = obj[key];
alert (key+'='+val);

но он пробегает только 1ю строку массива начала по цифровым индексам а потом по буквенным, а вот как обратиться к конкретному полю конкретной строки не могу понять.

то есть нужен аналог PHP функции

while ($row = mysql_fetch_array($result))

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

эмм.... не понял!

мне нужно циклом перебрать полученный массив и из каждой его строки выбрать конкретные значения

в моем случае он имеет вид типа (как я думаю)


{'key_1': [{
'id': '1',
'name': 'Petya'
}],
'key_2': [{
'id':'2',
'name':'Vasya'
}],
........
}

Link to comment
Share on other sites

  • 0

перефразирую постановку задачи

Javascript функция должна провести разбор массива переданного в нее из Php скрипта.

в php это выглядело бы так


$sql = "SELECT `name`,`id` FROM `users` WHERE `city` = '$v'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
while ($row = mysql_fetch_array($result)) {
echo $row['name'].'№'.$row['id'].'<br />';
}

в результате я получаю запись типа


Петя № 1
Вася № 2

нужно получить подобный результат при помощи javascript

предложенный вами цикл


var q = '';

for(var i in obj){
q += obj[i][0].id+' № '+obj[i][0].name+' '
}
alert (q);

выводит


undefined № undefined
undefined № undefined
undefined № undefined
undefined № undefined

а если убрать [0] и оставить только obj.id и obj.name

получаем такой результат


Петя № 1
Петя № 1
Петя № 1
Петя № 1

что то я вообще запутался

Link to comment
Share on other sites

  • 0

=) Хорошая вещь форум - пока не задашь вопрос на форуме - сам не додумаешься до решения

если интересно до чего я дошел то:

вместо того чтоб отправлять в Javascript массив, и пытаться его разобрать - я разобрал его в PHP как писал в предыдущем посте, сформировал текстовую строку и отправил ее в javascript

Link to comment
Share on other sites

  • 0

Так, давайте по порядку. Вы в каком браузере работаете? Посмотрите, что лежит у вас в obj. Для этого в яваскрипте напишите console.log(obj);, потом откройте на тестовой странице инструменты разработчика (в Хроме и в ИЕ это F12, или через меню браузера), откройте вкладку консоли и скопируйте сюда все, что выведет вам консоль.

Трудно что-то понять не зная как выглядит объект с которым вы работаете.

Link to comment
Share on other sites

  • 0

получается в яваскипт возвращалас толька 1я строка записи выбранной из базы данных - Вася остался за бортом, а мы его искали.

в общем это уже не важно я нашел решение: розборку делаю в пхп а в яваскрипт передаю только строку - и все работает.

но возникла одна проблемка.

Все это я применяю для того чтоб строить динамические блоки Select в форме, при выборе определенного option-а в 1м select-е (к примеру буква алфавита), появляется 2й select в котором будут выводится все записи по этой букве.

2й select я добавляю в форму при помощи append()- а, проблема в том что при каждом последующем вызове у меня появляется новый select и так до бесконечности. Как организовать вывод 2го select-а, так чтоб он удалял предыдущий?


function send(id){
var s = id;

$.getJSON('myajax.php',{param: s},function(obj){
if (obj)
{
$('#form1').append(obj.data);

}

})
}

и последний немаловажный вопрос: почему IE и Chrome игнорят скрипт

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

Ау есть кто живой?!

Вам никто не обязан сидеть тут и отвечать на вопросы. Поэтому сбавьте тон.

Вообще не совсем понятно, что вам нужно в итоге. И не имея хоть какого-то примера ответа от сервера трудно что-то советовать.

Например, ответ обработать можно так http://jsfiddle.net/T94dj/1/

Вообще для отправки данных в формате json лучше использовать готовую функцию json_encode.

Обрабатывать js при получении eval или, если подключен фреймворк (jQuery, prototype), то их методами.

Link to comment
Share on other sites

  • 0

изменяюсь, прост уже нет ни каких мыслей в чем может быть проблема.

обработка json строки уже не нужна. Проблема в том что скрипт не работает в IE и Chrome, а так же не отображаются русские символы.

попытался найти ответ в инете но тока головную боль заработал.

В скрипт я обратно из пхп при помощи son_encode я отправляю готовую строку - которую только нужно вывести яваскриптом - но если в ней есть русские символы то ее содержимое отображается как null. пробовал использоать inconv но русские символы все равно не отображаются

вот еще раз листинг функции


function send(id){
var s = id;

$.getJSON('myajax.php',{param: s},function(obj){
if (obj)
{
$('#gorod').html(obj.data);

}

})
}

запускается она по онклику на опшене в селекте.

запрос дорабатывает пхп код


mysql_connect('localhost','root', 'root');
mysql_select_db('blablabla');
$v = $_REQUEST['param'];


$sql = "SELECT `name`,`id` FROM `users` WHERE `city` = '$v'";
$result = mysql_query($sql);

$str = "<select name=\"\" id=\"\"><option>ne vibran</option>";


while ($row = mysql_fetch_array($result)) {
$str .= "<option onclick=\"sendname({$row['id']})\">{$row['name']}</option>";
}
$str .= "</select>";
$str1 = iconv("utf-8", "windows-1251", $str);
$obj['data']= $str1;
echo json_encode($obj);

если есть соображения поделитесь плз

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

Ваш пост дал мне наводку на решение похожего вопроса.

Может быть, это уже неактуально, но все равно сообщу свое решение: объединить записи массива в строку

$sql = "SELECT `name`,`id` FROM `users` WHERE `city` = '$v'";
$result = mysql_query($sql);
$result = implode("','",$result);

и все записи будут орабатываться :) .

Edited by robert
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy