【问题标题】:Other separators I want use (not & and =) when I submitting a form提交表单时我想使用的其他分隔符(不是 & 和 =)
【发布时间】:2013-03-27 00:32:15
【问题描述】:

我用 Cherrypy 编写了服务器,我也使用了 Mako 模板。

我有变量 dict(包含信息工作的变量 Mako)用于与用户一起工作(我必须使用 Mako 和 JAvascript)。

我有一个问题,我无法将值的 Mako 传递给 Javascript。

MAKO --->>> JAVASCRIPT 和viccersa 不能通过。

当用户想要更改信息时,我需要使用表单。 例如,信息是识别一个人的数据。

当我连接服务器时 localhost:8100 并且我在 Url 上有自动 dict。

用户按下按钮的发送。(提交)以防发生变化。 服务器接收 Javascript 中的值,其中 Js 中的分隔符和 MAko 中的旧分隔符。 我有读取和转换 Javascript 中的分隔符的问题。

可以在发送时或之前更改字符串的提交形式吗?

我想对提交的表单进行编程,因为我想使用另一个分隔符(不是 & 和 =)。

这可能吗?

现在我写一个例子:

www.theuser.com/?Name=IBM&surname=PC

如果发送时可编程功能

www.thepc.com/?Name%24+IBM+%23%+Surname%24+PC

重复:当我发送参数时,我不想要这个分隔符 & 或 =,我想使用其他分隔符。 分隔符

    javascript              Mako           

      =                       %24+
      &                       +%23+

这个查询字符串是我的项目的原始:

http://localhost:8100/index2?json_data=demo_title%24+Demo+title+%23+proc1_script%24+script.sh+parameters+%23+proc1_chk_make%24+on+%23+outputp2_value%24++%23+demo_input_description%24+hola+mundo+%23+outputp4_visible%24+on+%23+outputp4_info%24++%23+inputdata1_max_pixels%24+1024000+%23+tag%24++%23+outputp1_id%24+nanana+%23+proc1_src_compresion%24+zip+%23+proc1_chk_cmake%24+off+%23+outputp3_description%24++%23+outputp3_value%24++%23+inputdata1_description%24+input+data+description+%23+inputp2_description%24+bien%3F+%23+inputp3_description%24+funciona+%23+proc1_cmake%24+-D+CMAKE_BUILD_TYPE%3Astring%3DRelease++%23+outputp2_visible%24+on+%23+outputp3_visible%24+on+%23+outputp1_type%24+header+%23+inputp1_type%24+text+%23+demo_params_description%24+va+bien+%23+outputp1_description%24++%23+inputdata1_type%24+image2d+%23+proc1_chk_script%24+off+%23+demo_result_description%24+win%3F+%23+outputp2_id%24+nanfdsvfa+%23+inputp1_description%24+funciona+%23+demo_wait_description%24+boh+%23+outputp4_description%24++%23+inputp2_type%24+integer+%23+inputp2_id%24+papapa+%23+outputp1_value%24++%23+outputp3_id%24+nananartrtrt+%23+inputp3_id%24+pepepe+%23+outputp3_type%24+header+%23+inputp3_visible%24++off+%23+outputp1_visible%24+on+%23+inputdata1_id%24+id_lsd+%23+outputp4_value%24++%23+inputp2_visible%24+on+%23+proc1_source%24+lsd-1.5.zip+%23+inputp3_value%24+si+%23+proc1_make%24+-j4+-C++%23+images_config_file%24+cfgmydemo.cfg+%23+outputp2_type%24+header+%23+proc1_subdir%24+xxx-1.5+%23+proc1_url%24+http%3A%2F%2Fwww.ipol.im%2Fpub%2Falgo%2F...+%23+inputdata1_image_depth%24+1x8i+%23+inputp1_id%24+popopo+%23+inputp1_value%24+si+%23+inputp2_value%24+no+%23+demo_data_filename%24+data_saved.cfg+%23+inputdata1_info%24+info_lsd+%23+outputp3_info%24++%23+inputdata1_image_format%24+.pgm+%23+outputp1_info%24++%23+inputdata1_compress%24+False+%23+inputp1_visible%24+on+%23+proc1_id%24+lsd+%23+outputp4_id%24+nana+%23+outputp2_description%24++%23+outputp4_type%24+header+%23+outputp2_info%24++%23+inputp3_type%24+float+%23+&tag=&inputp4_id=hi&inputp4_type=text&inputp4_description=hello+program&inputp4_value=no&inputp4_info=bol&inputp4_visible=on

对于主持人: 我在https://stackoverflow.com/questions/13353539/how-to-change-how-the-url-is-encoded-when-a-form-is-submitted的帖子上看到了 但这对我不感兴趣。

附: Jquery 或 Javascript 中的解决方案对我来说是平等的。

【问题讨论】:

  • 你的问题不是很清楚。你能用非常简单的术语来表达吗?
  • 可以更改此设置,但您必须手动实现所有内容(从每个表单字段的名称和值构建一个 URL,然后更改文档的 href)。但你不应该这样做。只需调整接收脚本以应对标准分隔符。它们是标准的是有原因的。
  • @RobG 我相信(但可能是错误的)他想要更改表单,以便通过 GET 提交到 myparser.php?field1=value1&field2=value2 而不是提交到 myparser.php?field1%24value1+%23%+field2%24value2。我只能想象他担心用户输入=& 并且不熟悉百分比编码。
  • @dave 你了解我的想法或想法。但是如何通过 GET 将这个提交更改为 myparser.php?field1=value1&field2=value2 它转到 myparser.php?field1%24value1+%23%+field2%24value2。
  • 你的用户界面看起来怎么样,它是如何使用 JS 的?为什么你不能让你的服务器只接受标准分隔符(而不是这些花哨的$/# 东西)?

标签: javascript python url cherrypy mako


【解决方案1】:

好吧,我很确定您这样做的理由并不能证明这样做是合理的,但要回答这个问题,这就是您更改令牌的方式。我假设 jQuery,它不是完全必要的,但会使代码更短。

HTML:

<form id="myform" action="myparser.php">
<input ...>
</form>

JavaScript:

$('#myform').submit(function(e){
    e.preventDefault();
    var q=$(this).attr('action'),f=this.elements,i;
    for(i=0;i<f.length;++i){
        q+=(i===0?'?':'+%23%+')+f[i].name+'%24'+f[i].value;
    }
    document.location.href=q;
    return false;
});

这是略微缩小的,所以这里是要点。我们首先绑定到submit 事件,我们阻止了该事件(preventDefaultreturn false 更加确定),然后获取表单的所有元素(this.elements)并遍历它们。在循环结束时,q 是我们要提交到的完整 URL(使用 action 属性并填写所有名称/值),所以我们只需将 HREF 设置为它就可以了。在这种情况下发给myparser.php

请注意,这不会进行任何字符替换。您应该以某种方式使f[i].value 安全。从您的问题来看,您显然不想要标准的 URL 编码,但您需要做一些事情来防止使用坏字符。

最后,这只是发送方。您仍然需要在服务器端执行一些巧妙的操作才能真正读取这些值。

【讨论】:

  • 对不起,我没有 php 文件,你不用担心。现在我知道为我的项目改变了
  • 当然,发送到什么脚本都没有关系。当我谈论网站时,我只是使用 PHP 作为通用的“服务器脚本”标记。
  • 对不起@david...我在哪里可以找到一些解释这些事情的网站?或者把对我有帮助的网站传给我?
  • 取决于你想知道什么。 jQuery 在这里有很好的记录:api.jquery.com。对于通用 JavaScript,Google 是您的朋友(我通过快速搜索找到了 .elements)。对于 python-as-a-server,不知道,也许这会对你有所帮助:stackoverflow.com/a/8929395/1180785
  • 序列化表单还需要更多的工作,它只是遍历控件并获取它们的值。您必须处理复选框、单选框、多项选择、禁用控件、没有名称的控件等。但我认为您的总体策略是合理的。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2021-05-31
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2022-11-20
  • 1970-01-01
相关资源
最近更新 更多