ФорумПрограммированиеPHP для идиотов → Вопрос по форме

Вопрос по форме

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 13:12

    Привет! Хочу сделать, чтобы когда выбираешь определынный пунк меню в <select>, то появляются новые поля для ввода. Как это сделать?

    Я подозреваю jquery мне поможет с этим?
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 13:17, спустя 5 минут 5 секунд

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 13:27, спустя 9 минут 43 секунды

    спасибо читаю
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 17:18, спустя 3 часа 51 минуту 8 секунд

    Все работает. Но если попытаться прикрутить JsHttpRequest к фреймворку CodeIgniter, то нет.

    Насколько я понял, то back-end нужно делать через функцию контроллера:

           function ajax()
           {

                $this->load->library('JsHttpRequest');
                $JsHttpRequest=new $this->JsHttpRequest('utf-8');
               
               switch($this->input->post('order_type'))
               {
                   case 'personal_order':
                       $html="<h1>personal order</h1>";
                   break;


                   case 'public_order':
                       $html="<h1>public_order</h1>";
                   break;
               }
               echo $html;
           }


    front-end сделан так:

    <script>
    function doload(value){
    var req=new JsHttpRequest();
    req.onreadystatechange=function()
    {
       if(req.readyState==4)
           document.getElementById("result").innerHTML=req.responseText;}
           
       req.open("POST","<? echo site_url('main/ajax'); ?>",true);
       req.send({order_type:value});
    }
    </script>


    <h5>Тип заказа</h5>
    <select name="order_type" onchange="doload(this.value);">
    <option value="not_selected">Выберите тип заказа</option>
    <option value="personal_order">Персональный заказ</option>
    <option value="public_order">Публичный заказ</option>
    </select>

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


    Тоесть вот эта строка ссылается на back-end:
        req.open("POST","<? echo site_url('main/ajax'); ?>",true);


    При переключении менюшки ничего не происходит. Хотя если ссылаться не на функцию контролерра, а на конкретный файл, то все работает. Помогите разобраться
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 17:21, спустя 2 минуты 28 секунд

    в первом кучке кода ты получаешь переменную из $this->input->post('order_type') а должен получать из $JsHttpRequest если я правильно понимаю
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 17:24, спустя 3 минуты 14 секунд

    нет, с постом все правильно. Вот рабочий варинт через отдельный файл. Тоесть когда:
     req.open("POST","<? echo base_url . '/ajax/ajax_test.php'); ?>",true);


    ajax_test.php:

    <?
    require("JsHttpRequest.php");
    $JsHttpRequest=new JsHttpRequest("utf-8");

    switch($_POST["order_type"])
    {
    case 'personal_order':
    $html="<h1>personal order</h1>";
    break;


    case 'public_order':
    $html="<h1>public_order</h1>";
    break;
    }
    echo $html;
    ?>

    тут тоже через пост и все работает
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 17:24, спустя 26 секунд


    в первом кучке кода ты получаешь переменную из $this->input->post('order_type') а должен получать из $JsHttpRequest если я правильно понимаю
    я так же думаю
    Сапожник без сапог
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 17:26, спустя 2 минуты 10 секунд

    там еще указывается каким методом передавать данные, вот:
    req.open("POST","<? echo site_url('main/ajax'); ?>",true);

    тоесть через пост
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 18:19, спустя 52 минуты 23 секунды

    ну через пост то понятно
    у тебя JsHttpRequest должен обработать этот пост иначе какой смысл от его подключения ?!
    а то что ты получаешь результат в ajax_test.php это просто совпадение
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 18:33, спустя 14 минут 30 секунд

    смысл подключения мне не ясен. Я делал как написано в статье, вот:
    http://pyha.ru/articles/php/ajax-select/

    там тоже самое, но через _request:

    <?
    require("JsHttpRequest.php"); //Подключаем библиотеку
    $JsHttpRequest=new JsHttpRequest("windows-1251"); //Создаем экземпляр класса, указываю рабочую кодировку.

    //Далее все просто. В зависимости от выбранного параметра в первом select`e, заполняем переменную $html необходимым кодом.

    switch($_REQUEST["country"]):
    // …. обработка

  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 18:37, спустя 3 минуты 31 секунду

    smackthat, ок
    Спустя 29 сек.
    перед свичем
    switch($this->input->post('order_type'))
    сделай дамп поста глянь что там
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 18:56, спустя 19 минут 20 секунд

    блин, а как это сделать?

    я пробую так:

    $myFile = "testFile.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    $stringData = $this->input->post('order_type');
    fwrite($fh, $stringData);
    fclose($fh);

    но файл не создается…
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 19:02, спустя 6 минут 12 секунд

    smackthat, если я правильно понял, то Мавр хочет от тебя var_dump($_POST);
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 25 июля 2009 г. 19:08, спустя 5 минут 26 секунд

    я пробывал через дебаггер, типа в watch добавил переменную $_POST, но как только я выбираю что-то из списка, тоесть должна начать исполняться ajax часть, то получаю ошибку такую:


    Спустя 57 сек.
    я поэтому и пробывал _POST вывести через файл.
    Спустя 53 сек.
    короче, я так понял, что до функции _ajax оно даже не доходит, где то раньше ошибка
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 25 июля 2009 г. 19:13, спустя 5 минут 30 секунд

    smackthat, ну правильно шибка 404
    Спустя 51 сек.
    видимо с контролом чтото

Пожалуйста, авторизуйтесь, чтобы написать комментарий!