Пыха всегда с тобой

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 22 Май, 2012, 06:47:36

Страниц: [1] 2 3
Печать
Автор Тема: Ajax форма  (Прочитано 5513 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Z-MODe    ↓ 
21 Август, 2008, 12:11:17
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

Положение очень печальное.. заказчику на сайте как оказалось надо калькулятор аналогичный(точно такойже) как и у
http://autoins.ru/ru/osago/calculator/
Но воровать скрипты у актис сюстема как то не хочется.. к тому же всего и не сваруешь.
Аякс знаю только теоретически.
Как получать текущее значение формы я думаю смогу нагуглить, но было бы не плохо если бы всё таки расказали или дали ссылки чё покурить.
Основная загвоздка в том, как сделать вот этот выбор населённого пункта, я понимаю что надо составить аяксовый запрос на сервер, сервер на него пришлёт ответ и собственно всё, но как потом этот ответ распарсить?
Т.е. как вообще составить правильный запрос на сервер? и как на пыхе его принять и отправить обратно?
если не лень разжуйте пожалуйста этот калькулятор, заранее очень благодарен, просто и сроков нету самому разбираться, тестить и т.д.
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
sap    ↓ 
21 Август, 2008, 01:23:59 , спустя 1 час 12 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

Калькулятор разжевывать не буду, но сами принципы попробую объяснить.
 
1. Берешь либу для работы с аджаксом :) (простейший вариант — JsHttpRequest, Мавру просьба не материться:))).
2. Дальше на примере, вот у меня эта штука сделана как раз аджаксом, объясняю:
Javascript
<script src="/JsHttpRequest/JsHttpRequest.js"></script>
<script language="javascript" type="text/javascript">
<!--
function encode_email() {
    q = document.getElementById('email').value; // получаем значение текстового поля email
    if (q != "") {
        JsHttpRequest.query(
            "/JsHttpRequest/backend_encode_email.php", // обработчик
            { "q": q }, // переменные, которые нужно передать в обработчик
            function(result) { // функция, которая выполняется после того, как отработал обработчик
                document.getElementById('emailresult').innerHTML = result["r"]; // впихиваем в див с ид emailresult подготовленный в обработчике код
            },
            false
        );
    } else {
        document.getElementById('emailresult').innerHTML = '<b><font color="red">Вы не ввели e-mail адрес</font></b>';
    } return false;
}
//-->
</script>
А в обработчике:
PHP
require_once "JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");
 
$email = $_REQUEST['q'];
 
if (!preg_match ('/^((\S+)@([a-z0-9-]+)(\.)([a-z]{2,4})(\.?)([a-z]*)(,?)( ?))+$/i', $email)) {
    $data = '<b><font color="red">Неверный формат e-mail адреса</font></b>';
} else {
    $data = '<p><b>Первый способ:</b><div class="code">'.method_1($email).'</div><p>
<p><b>Второй способ:</b><div class="code">'
.method_2($email).'</div><p>
<p><b>Третий способ:</b><div class="code">'
.method_3($email).'</div><p>
<p><b>Четвертый способ:</b><div class="code">'
.method_4($email).'</div><p>';
}
 
$_RESULT = array (
    "r" => $data,
);
3. Все :)
Записан

Z-MODe    ↓ 
21 Август, 2008, 02:56:39 , спустя 1 час 32 минуты 40 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

Такс... спасибо большое.. в общих чертах понятно..
Т.е. я на пыхе отправляют массив, а яваскриптом его иннерХТМЛю? а не надо на жс проверки какие нить ставить типа пришёл ли ответ или нет?
И сразу вопрос, в том калькуляторе, после выбора региона в остальных появляется "идёт загрузка", как такую вещчь получить?
У мну с этим просто вообще трабл=( на ЖС ничё толком не писал..
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
adw0rd    ↓ 
21 Август, 2008, 09:01:10 , спустя 6 часов 4 минуты 31 секунду
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17610
Сила слова: 1.67


а не надо на жс проверки какие нить ставить типа пришёл ли ответ или нет?

Надо. Прочти внимательно, еще это и это.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
sap    ↓ 
21 Август, 2008, 10:01:56 , спустя 1 час 46 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697
Сила слова: 1.48

И сразу вопрос, в том калькуляторе, после выбора региона в остальных появляется "идёт загрузка", как такую вещчь получить?
В начале функции (до запроса бекенду) выводишь див с «идет загрузка», после получения результата его убираешь (document.getElementById(id).style.display = 'none';).
Записан

CTAPbIu_MABP    ↓ 
21 Август, 2008, 11:57:34 , спустя 1 час 55 минут 38 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Мавру просьба не материться
бля, вот хуле сразу мавер?!
возьми в пример jQuery и мавер будет на тя малицца
Записан

java.lang.OutOfMemoryError
Z-MODe    ↓ 
21 Август, 2008, 11:04:49 , спустя 11 часов 7 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

А подскажите пожалуйста, как мне забрать валуе с опшинов у селекта? обращаться к айдишнику селекта?
И смогу ли я сделать иннер.хтмл в селект по айдишнику, т.е. я как думаю, сделать так же переменную $data как sap показал, со всеми опшионами
PHP
$data = <option> </option>;
$data .= <option> </option>;
$data .= <option> </option>;
....
 
и потом сделать
document.getElementById('select').innerHTML = result["r"];
получится ли так?
т.е. что бы избежать цикла по массиву на ЖС.
И все функции в яваскрипте на сколько я знаю срабатываю по определённому эвенту, как мне запустить допустим функцию result() сразу как пришёл ответ?
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
adw0rd    ↓ 
21 Август, 2008, 11:17:17 , спустя 12 минут 28 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17610
Сила слова: 1.67

Z-MODe, вот, подобное обсуждали http://pyha.ru/forum/topic/433.0
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Z-MODe    ↓ 
21 Август, 2008, 11:43:49 , спустя 26 минут 32 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

Чужое брать конечное не хорошо, но завтра надо сдать заказчику проект, понял что надо ставить тучу условий в этом калькуляторе. Более менее разобравшись сейчас , их ЖСка показалась не столь сложной, трабл всё равно остался. гляньте пожалуйста:
http://autoins.ru/media/inc/calc-new.js
как я понимаю эта функиция и отправляет запрос:
PHP
function useAJAX( url )
{
    if( url.match( new RegExp( "^[a-z]+://" , "i" ) ) ) return null;
    if( navigator.userAgent.indexOf( "Opera" ) != -1 ) return null;
    if( isStupidIEVersion() ) return null;
    var http_request = null;
    if ( window.XMLHttpRequest )
    {
        http_request = new XMLHttpRequest()
        if( http_request.overrideMimeType ) http_request.overrideMimeType( "text/xml" );
    }
    else if ( window.ActiveXObject ) try { http_request = new ActiveXObject( "Microsoft.XMLHTTP" ); } catch( e ) {}
    if( http_request )
    {
        http_request.onreadystatechange =
        function()
        {
            if ( http_request.readyState == 4 )
            {
                // everything is good, the response is received
                if ( http_request.status == 200 )
                {
                    // perfect!
                    eval( http_request.responseText );
                }
                else
                {
                    // there was a problem with the request,
                    // for example the response may be a 404 (Not Found)
                    // or 500 (Internal Server Error) response codes
                    //alert( http_request.status )
                }                  
            } else
            {
                // still not ready
                //alert( "still not ready" );
            }               
        }
        // Remove possible junk from response.
        http_request.open( "GET" , url , true );
        http_request.send( null );
    }
    return http_request;
}

щас возникла мысль что проще подменить серверную часть чем клиентскую..
а используется эта функция непосредственно в функции: function performLoading( select )
(код не выкладываю что бы не засорять)
а добавляется в селект при помощи функции:
function setSelectContents( selectObj ,  aRecord , startingWith )
 
А вопрос в том правильно ли я всё разобрал?
и в функцию useAJAX надо передавать юрл, с гет переменными, которые уйдут на сервак для дальнейшей обработки?
 

Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
adw0rd    ↓ 
21 Август, 2008, 11:58:18 , спустя 14 минут 29 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17610
Сила слова: 1.67

Z-MODe, хочешь успеть до утра и без трабл? Мой тебе совет, заюзай фреймворк типа JQuery, Prototype или JsHttpRequest для AJAX'a.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
CTAPbIu_MABP    ↓ 
21 Август, 2008, 11:58:32 , спустя 14 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

порадовала строка
Text
if( navigator.userAgent.indexOf( "Opera" ) != -1 ) return null;
Записан

java.lang.OutOfMemoryError
Z-MODe    ↓ 
22 Август, 2008, 12:01:55 , спустя 3 минуты 23 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

adw0rd, Шарил бы я в яваскрипте. я изначально думал калькулятор сделать чисто серверный.. а тут ему вот как там надо.. а я в ЖС вааще ноль.. к тому же там только в одном месте надо заяксить, города эти.. а на остальное там реально куча условий просто.. эти условия пока соображу как.. ещё больше времени думаю пройдёт=(
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
CTAPbIu_MABP    ↓ 
22 Август, 2008, 12:06:08 , спустя 4 минуты 13 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

попробуй вот этим города тянуть
там уже все сделано за тебя
 
http://mabp.kiev.ua/content/2008/04/08/autocomplete_by_your_own_hands/
Записан

java.lang.OutOfMemoryError
adw0rd    ↓ 
22 Август, 2008, 12:08:12 , спустя 2 минуты 4 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17610
Сила слова: 1.67

Z-MODe, еще раз говорю: в случае с JsHttpRequest есть обширная документация на РУССКОМ языке.
Без знаний JavaScript можно с легкостью ей (JsHttpRequest) пользоваться. Что не скажешь о том коде, на который ты привел ссылку.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
adw0rd    ↓ 
22 Август, 2008, 12:09:34 , спустя 1 минуту 22 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17610
Сила слова: 1.67

CTAPbIu_MABP,
if( isStupidIEVersion() ) return null;
:)
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Страниц: [1] 2 3
Печать
 

Перейти в: