Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > perl + jquery: не могу получить ответ от сервера


Автор: fanat1k 13.4.2010, 12:24
Вот небольшой пример кода, пусть test1.cgi
Код

#!/usr/bin/env perl
print <<script;
Content-type: text/html\n\n
<script type='text/javascript' src='/js/jquery/jquery.js'></script>

<div id="mydiv">hello</div>
    <form name="my_form" method="POST" onSubmit="check_username()">
    <input type="text" name="username" value="" id="username_id">
    <input type="submit" value="submit">
    </form>

    <script type="text/javascript">
        function check_username() {
            alert("checking");
            //\$("<h1>TEST</h1>").appendTo("#mydiv");
            var u = \$("#username_id").attr("value");
            \$.post("/cgi-bin/check_user.pl", {u: u}, function(theResponse){
                alert("response" + theResponse);
                //\$("<h1>TEST</h1>").appendTo("#mydiv");
                alert("END");
            });
     }
    </script>
</html>

SCRIPT


check_user.pl:
Код

#!/usr/bin/env perl
use CGI qw /:standard/;

print "Content-Type:text/plain\n\n";
#print "Content-Type:application/json\n\n";

my $user_name = param('u');

open FH, ">>/tmp/check_user.txt" or die;
print FH "user_name:$user_name\n";
close FH;
print "$user_name";

Все работает хорошо, кроме одного. Я не могу поймать ответ от сервера. Код alert("response" + theResponse) показывает только "response".
В чем проблема ? Пробовал заголовки менять. Или подскажите модуль который упростит мне жизнь.
И еще вопрос, касательно jquery. Код "\$("<h1>TEST</h1>").appendTo("#mydiv")", который после alert("checking") срабатывает, но только на мгновение появляется TEST и исчезает. Почему так ? А внутри функции этот код вообще не отрабатывает и даже не срабатывает alert("END") который идет за ним.
Спасибо.

Автор: fanat1k 13.4.2010, 14:24
Какая то магия для меня этот JavaScript.
Начал изучать Firebug и немного поклацав ... о чудо! При установке брейкпоинта в точке "alert("response: " + theResponse)" он мне вернул ответ! Убрал - ответа нету, установил - есть.
Или вот еще упрощенный кусок кода из приведенного выше
Код

        function check_username() {
            var u = \$("#username_id").attr("value");
            \$.post("/cgi-bin/check_user.pl", {u: u}, function(theResponse){
                alert("END");
            });
           alert("END2");
        }

Вылазят оба алерта, END2 поверх END. Если закомментировать END2, то и END не срабатывает!!!
В итоге у меня код, приведенный в первом посте работает и я получаю ответ от сервера, если я добавлю alert("END2")!
Для меня это все выглядит как минимум бредово. Продолжаю копаться в Firebug'e.
Буду очень благодарен, если кто прольет свет на тьму моего JS и jquery.
Спасибо.

Автор: gcc 14.4.2010, 11:17
данные с js в perl вообще передаються?

если, да то в данном случае вопрос по js... спрашивайте в разделе про js

я например, не понял зачем так писать             \$.post("/cgi-bin/check_user.pl", {u: u}, function(theResponse){ 
onSubmit="check_username()" (можно click поставить просто)
?
что значит {u: u}  ?

Автор: fanat1k 15.4.2010, 10:59
Цитата(gcc @ 14.4.2010,  11:17)

данные с js в perl вообще передаються?

да, передаются. имя переменной успешно логируется:
Код

open FH, ">>/tmp/check_user.txt" or die;
print FH "user_name:$user_name\n";
close FH;

Цитата(gcc @ 14.4.2010,  11:17)

я например, не понял зачем так писать             \$.post("/cgi-bin/check_user.pl", {u: u}, function(theResponse){ 
onSubmit="check_username()" (можно click поставить просто)
?

$.post  - аякс запрос. вызывать можно по многим событиям (onSubmit, onChange, и т.д.)
Цитата(gcc @ 14.4.2010,  11:17)

что значит {u: u}  ?

вторая u: то что введено в поле <input type="text" name="username" value="" id="username_id">.
                 var u = \$("#username_id").attr("value");
первая u: имя переменной, которая будет доступна в перле: my $user_name = param('u')

PS: так как данные с сервера у меня получается получить при определенных обстоятельствах описанных в моем втором посте, а также следую вашему совету я иду в раздел JavaScript.
Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)