perl javascript / jquery - 从javascript / jquery传递到perl的变量

时间:2012-05-30 23:30:33

标签: javascript jquery perl mason

<input type="checkbox" id = "has_sidebar" name="cb" value="" onclick="result=$(this).attr('value', this.checked ? 1 : 0); alert('my result : 'result.context.value);" >

RESULT.CONTEXT.VALUE具有复选框(01)的值。

如何在perl变量中指定它?
这是代码。

<%class>
use JSON;
use URI::Escape;

has 'data';
has 'cb'        => ( isa => 'Array');
</%class>

<%init>
my $args = eval {
        return from_json(uri_unescape($.data), { ascii => 1});
};
$m->redirect('/login') unless $USER && $USER->{'logged_in'};
$args->{'authors'} = [] unless $args->{'authors'} && ref($args->{'authors'}) eq 'ARRAY';
</%init>

<li class="header">
        <p>
                Authors
                &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
                &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
                show sidebar
        </p>
</li>
%  my @author_box = ();

% foreach my $a (sort { $a->{'last_name'} cmp $b->{'last_name'} || $a->{'first_name'} cmp $b->{'first_name'} } @{$args->{'authors'}}) {
<li>
        <p>
                <a href="javascript:void(0)" onclick="remove_author(<% $a->{'id'} %>);" class="right icon-small icon-delete-small"></a>
                <% $a->{'last_name'} %>, <% $a->{'first_name'} %> (<% $a->{'initials'} %>)

                &emsp;&emsp;&emsp;&emsp;
                &emsp;&emsp;&emsp;&emsp;
                <input type="checkbox" id = "has_sidebar" name="cb" value="" onclick="result=$(this).attr('value', this.checked ? 1 : 0); alert('id : <% $a->{'id'} %> - checked: ' + result.context.value);" >

        </p>
</li>

% # put the value of the checkbox in array
<script type="text/javascript">
<% $.cb %> = result.context.value  //this is not the RIGHT WAY!!!
var hsb = [];
hsb.push({ <% $a->{'id'} %>: <% $.cb %> });
</script>

% }
<li>
        <p>
                <input type="submit" value="Add" class="right" onclick="add_author();"/>
                <input id="new_author" style="width:75%;" />
                <input type="hidden" id="new_author_data" />
        </p>
</li>

1 个答案:

答案 0 :(得分:2)

据我所知,你的问题是正确的:

你不能直接将值从javascript传递给perl因为perl是执行SERVER-SIDE(它构建html + javascript)然后javascript运行CLIENT-SIDE。您可以传递来自perl-&gt; javascript的值,但反之亦然。

您需要表单提交或AJAX调用,然后才能获得服务器端处理。

工作流程:

  1. 服务器端处理(在您的情况下运行您的perl) - 构建页面
  2. 向客户提供
  3. 客户端内容 - 运行javascript
  4. 通过表单或AJAX请求将结果返回给服务器
  5. 处理结果(再次运行一些perl)
  6. 编辑:

    关于表单处理和AJAX的所有内容已经在互联网和Stackoverflow上写了数百次。

    您需要阅读:Formprocessing和AJAX。

    我还建议您查看jquery文档,因为jquery有一个非常强大的ajax-suite,它可以为您节省大量的工作。

    Form Processing with Perl

    Another Beginners Guilde for Formprocessing with Perl

    The jQuery Ajax Section

    The jQuery Ajax-Call

    或者只是谷歌并阅读你喜欢的啧啧。