За последние 24 часа нас посетили 58303 программиста и 1848 роботов. Сейчас ищут 1306 программистов ...

Значения в select через javascript, json,motools

Тема в разделе "JavaScript и AJAX", создана пользователем sapun, 7 сен 2011.

  1. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Доброго времени суток! Мне надо вывести значение(option) в drop down menu через java scrip при помощи json. Что у меня получилось на текущий момент
    PHP:
    1. <?php
    2. // clean up the JSON message
    3. $defect = trim($_GET['article']);
    4. // check that the article field isn't empty
    5. //$response = false;
    6. if ( $defect ) {
    7.   // Check the database
    8.   $db =& JFactory::getDBO();
    9.   $query = "SELECT `htmlname` FROM `#__models`,`#__defect` WHERE `dSerialItem`= `mSerialItem` and LOWER(`article`) = ".$db->quote($defect).";";
    10.   $db->setQuery($query);
    11.   $list = $db->loadObjectList();
    12.  
    13.   foreach($list as $pdefect) {
    14.      $ldefect = $ldefect. $pdefect->htmlname;}
    15.  
    16.   }
    17. $respdef = array('defect_ok' => $ldefect);
    18. //send the reply
    19.  
    20. echo json_encode($respdef);
    21.  
    22. // stop the from running
    23. $MyForm->stopRunning = true;
    24. ?>
    js
    [js]window.addEvent('domready', function() {
    var url = 'index.php?option=com_chronoforms&chronoform=form_act_oglyadu_tech&event=ajaxEvent1&format=raw';
    var article = $('article');
    article.addEvent('blur', function() {
    var value = article.value.trim();
    var jSonRequest = new Request.JSON({
    url : url,
    method : 'get',
    data : {article : article.value},
    onComplete : function(r) {
    //$("#pole").val(r.article_ok);
    $('descdefect').value = r.defect_ok;
    }
    }).send();
    });
    });[/js]

    Понимаю что причина кроется в этой строчки
    [js]$('descdefect').value = r.defect_ok;[/js]

    descdefect - это мое селект меню в html, но как вывести правильно не знаю. Подскажите кто может :cry:
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    делал подобное на jquery, подгружая данные аяксом:

    [js]
    $.get('/url/to/json/array', {},
    function(data){
    for(c = 0; c < data.length; c++){
    var option = '<option value="' + data[c]['value'] + '">' + data[c]['title'] + '</option>';
    $('#selectbox_id').append(option);
    }
    }, "json");
    [/js]
     
  3. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Вопрос как раз в синтаксисе мутулса, не могу как правильно написать, уже все перерыл
     
  4. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    если элемент $('descdefect') - это input, то
    Код (Text):
    1.  
    2. $('descdefect').value = r.defect_ok;
    вот это должно работать, если это div, span и т.д. то подойдёт
    Код (Text):
    1.  
    2. $('descdefect').set('text',r.defect_ok);
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    sapun
    если дело в синтаксисе мутулза, то так и нужно написать в заголовке, или хотя бы в теле вопроса.
    переделай название топика, укажи что нужна помощь по mootools. кто знает - может откликнется.
     
  6. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Это не инпут и не див, это селект меню

    HTML:
    1. <select name="descdefect"><option value="0">Не вибрано</option> </select>
    2.  
    Вот сюдна надо вывести значения
     
  7. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    чтобы стало новым option?
    тогда так:
    Код (Text):
    1.  
    2.   var option = new Element('option',{'value':r.defect_ok}).set('text',r.defect_ok);
    3.   option.inject($('das'));
    4.      
     
  8. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Заменил, но не работает, что опять может быть не так?
    [js]window.addEvent('domready', function() {
    var url = 'index.php?option=com_chronoforms&chronoform=form_act_oglyadu_tech&event=ajaxEvent1&format=raw';
    var article = $('article');
    article.addEvent('blur', function() {
    var value = article.value.trim();
    var jSonRequest = new Request.JSON({
    url : url,
    method : 'get',
    data : {article : article.value},
    onComplete : function(r) {
    // $('descdefect').append(r.defect_ok);
    var option = new Element('option',{'value':r.defect_ok}).set('text',r.defect_ok);
    option.inject($('das'));

    }
    }).send();
    });
    });[/js]
     
  9. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    Код (Text):
    1.  
    2. option.inject($('das')); //это моё было замени на
    3.  
    4.  option.inject($('descdefect'));
     
  10. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Да вроде так и сделал, но все равно не работает
    [js]window.addEvent('domready', function() {
    var url = 'index.php?option=com_chronoforms&chronoform=form_act_oglyadu_tech&event=ajaxEvent1&format=raw';
    var article = $('article');
    article.addEvent('blur', function() {
    var value = article.value.trim();
    var jSonRequest = new Request.JSON({
    url : url,
    method : 'get',
    data : {article : article.value},
    onComplete : function(r) {
    // $('descdefect').append(r.defect_ok);
    var option = new Element('option',{'value':r.defect_ok}).set('text',r.defect_ok);
    option.inject($('descdefect'));

    }
    }).send();
    });
    });[/js]

    Если смотреть через firebug, то вижу

    o is null
    [Прерывать на этой ошибке] (function(){this.MooTools={version:"1....,2)+"</invoke>");return eval(rs)}})();
     
  11. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    а вообще запрос вовзращается? что в r
     
  12. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    defect_ok
    "test_2Відключення захисних релеДефект покриттяДефект решітки/декаДефект ручокДефект ущільнювачаЗапах газу/ пропускає газЗбій програми, повідомлення про помилкуЗбій у роботі вентилятораНе вмикаєтьсяНе гріє, або недостатній нагрівНе працює духовкаНе працює електрична конфоркаНе працює електропідпалНе працює індикаціяНе працює інфрачервоний нагрівач (гриль)Не працює пальникне працює роженне працює сенсорНе працює таймер/модуль/годинникНе працює ТЕНне світить лампаНе тримає полум'я пальникНеобхідна докомплектаціяНещільно прилягають дверіОплавлення ручок (панелі, рамки)Проблеми з регулюванням потужності нагрівуРозтріскування внутрішнього скла/ скла поверхніСамовільно вимикаєтьсяШуми при роботі"

    вот что у меня
     
  13. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    А что нужно в конечном итоге получить?
    элемент с #descdefect что за он? можно кусок html c ним?
     
  14. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Кидаю все, совсем уже ничего не понимаю(((
    html
    HTML:
    1. <select name="descdefect"><option value="0">Не вибрано</option> </select>
    2.  
    php
    PHP:
    1. <?php
    2. // clean up the JSON message
    3. $defect = trim($_GET['article']);
    4. // check that the article field isn't empty
    5. //$response = false;
    6. if ( $defect ) {
    7.   // Check the database
    8.   $db =& JFactory::getDBO();
    9.   $query = "SELECT `defect` FROM `#__models`,`#__defect` WHERE `dSerialItem`= `mSerialItem` and LOWER(`article`) = ".$db->quote($defect).";";
    10.   $db->setQuery($query);
    11.   $list = $db->loadObjectList();
    12.  
    13.   foreach($list as $pdefect) {
    14.      $ldefect = $ldefect. $pdefect->defect;}
    15.  
    16.   }
    17. $respdef = array('defect_ok' => $ldefect);
    18. //send the reply
    19.  
    20. echo json_encode($respdef);
    21.  
    22. // stop the from running
    23. $MyForm->stopRunning = true;
    24. ?>
    js
    [js]window.addEvent('domready', function() {
    var url = 'index.php?option=com_chronoforms&chronoform=form_act_oglyadu_tech&event=ajaxEvent1&format=raw';
    var article = $('article');
    article.addEvent('blur', function() {
    var value = article.value.trim();
    var jSonRequest = new Request.JSON({
    url : url,
    method : 'get',
    data : {article : article.value},
    onComplete : function(r) {
    // $('descdefect').append(r.defect_ok);
    var option = new Element('option',{'value':r.defect_ok}).set('text',r.defect_ok);
    option.inject($('descdefect'));

    }
    }).send();
    });
    });[/js]
     
  15. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    а ещё #article что за он
     
  16. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    ещё вот так попробуйте
    Код (Text):
    1.  
    2. onComplete : function(r) {
    3. $('descdefect').innerHTML += '<option>'+r.defect_ok+'</option>';
    4. }
     
  17. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    article, поле на котором срабатывает событие и из которого берется переменная в запрос

    При последнем варианте получил ошибку((((

    $(
    [Прерывать на этой ошибке] $('descdefect').innerHTML += '<option>'+r.defect_ok+'</option>';
     
  18. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    но данные приходят 100%?
     
  19. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    То что данные приходят проверял так, взял и передал их в обычный инпут, в валуе и весь массив данных туда попал
     
  20. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    а ну ясно возьмите замените селект на:
    HTML:
    1.  
    2. <select id="descdefect"><option value="0">Не вибрано</option> </select>
    3.  
    просто не находит id элемента
     
  21. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    а какую версию джава скрипта использовать?С innerHTML ?
     
  22. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
  23. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Спасибо, Вы ГУРУ!!!!Остался последний вопрос, мне все вывилось в одну строку, хоть <option> вроде есть.
    Вывилось так Дефект1Дефект2Дефект3, а хотелось так

    Дефект1
    Дефект2
    Дефект3

    В чем может быть подвох?
     
  24. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    я так и знал, что это будет следующий вопрос)))
    данные приходят с разделительным слешем? ну то есть Дефект1/Дефект2/Дефект3
     
  25. sapun

    sapun Активный пользователь

    С нами с:
    30 авг 2011
    Сообщения:
    30
    Симпатии:
    0
    Ага)))не ужели я так туплю)))аж стыдно)))