【问题标题】:Are there limitations to passing parameters through .post() in jquery在 jquery 中通过 .post() 传递参数是否有限制
【发布时间】:2015-09-25 05:33:47
【问题描述】:

我在我的CMS 应用程序中广泛使用了.post()。下面的工作代码示例将 13 个(在我的应用程序中最多)参数传递给运行良好的 processing.php 文件。

当需要传递更多参数时,我只需使用action 表单属性,它也可以正常工作。

但是,我有一个应用程序需要传递 38 个变量,包括大字符串,但同时对 action file 执行检查,如果检查失败,我需要触发 js confirmation alert 到继续或取消。

我不太确定如何从processing.php 文件中触发js confirmation alert,以及如何在用户取消时返回原始文件并完整地输入表单中的信息。

但是,如果我使用 .post(),我确实知道如何完成此操作。

我的问题是:

如下所述,应该发送到processing.php.post() 的参数数量是否有任何限制,或者我应该采取另一种方法来处理上述问题?如果是这样,您有什么建议?

工作代码示例

// code element
    $( "#updateDefaultCodeButton" ).click(function(){
        var url = $('#updateDefaultCodeURL').val();     
        var code_font_family = $('#code_font_family').val(); 
        var code_font_color = $('#code_font_color').val();
        var code_font_weight = $('#code_font_weight').val();
        var code_font_size = $('#code_font_size').val();
        var code_bg_color = $('#code_bg_color').val();
        var code_pad_t = $('#code_pad_t').val(); 
        var code_pad_r = $('#code_pad_r').val(); 
        var code_pad_b = $('#code_pad_b').val();
        var code_pad_l = $('#code_pad_l').val(); 
        var code_w_pad_t = $('#code_w_pad_t').val(); 
        var code_w_pad_r = $('#code_w_pad_r').val(); 
        var code_w_pad_b = $('#code_w_pad_b').val();
        var code_w_pad_l = $('#code_w_pad_l').val(); 
        var postit = $.post( url, {
            code_font_family:code_font_family, 
            code_font_color:code_font_color,
            code_font_weight:code_font_weight,
            code_font_size:code_font_size, 
            code_bg_color:code_bg_color,
            code_pad_t:code_pad_t, 
            code_pad_r:code_pad_r, 
            code_pad_b:code_pad_b,
            code_pad_l:code_pad_l,
            code_w_pad_t:code_w_pad_t, 
            code_w_pad_r:code_w_pad_r, 
            code_w_pad_b:code_w_pad_b,
            code_w_pad_l:code_w_pad_l
        });     
        postit.done(function( data ) {window.location.replace("../generator.php?returnto=manage/global-styles-manage.php");});      
    });

【问题讨论】:

  • 附带说明,您最好序列化 FORM,而不是手动构造要发布的数据:api.jquery.com/serialize
  • 同意@A.Wolff。或者至少丢失所有变量声明并直接在发布数据对象中获取值,即{ code_font_family: $('#code_font_family').val(), ... }
  • @A.Wolff 感谢您的意见。这回答了有关执行任务的更好方法的问题......把它放在一个答案中,我会给你检查
  • @petebolduc @A.Wolff 的评论是非常好的建议,但绝对不是您问题的合适答案。无论您是否使用.serialize,您仍然会向您的服务器发送相同数量的数据。
  • @Andy 感谢您提供的其他信息

标签: javascript php jquery


【解决方案1】:

php.ini 包含post_max_sizemax_input_vars,这两者都会影响您可以发布到页面的数量。

http://php.net/manual/en/ini.core.php#ini.post-max-size http://php.net/manual/en/info.configuration.php#ini.max-input-vars

如果您发现自己超出限制(这将在错误日志中生成警告),您可以同时调整两者。

38 个变量应该没问题 - max_input_vars 默认为 1,000,post_max_size 默认为 2MB(我认为),因此您的文本字符串必须非常大。

【讨论】:

  • 非常感谢您的意见...非常感谢您花时间审查我的问题并提供答案。我投票给你是因为答案既与帖子限制有关,也与帖子限制相关。
  • 道歉 - 我不是在讽刺。我指出我的“输入”是在谈论“输入”,这让我笑了。
【解决方案2】:

JQuery Ajax 本身没有任何限制。请求大小在服务器上是有限的,但是通过取决于您的环境的各种配置。

阿帕奇:

  • LimitRequestBody,默认约为 2Gb,64 位可能更大,请查看错误日志了解详细信息。

PHP:

  • post_max_size 与 POST 大小直接相关
  • upload_max_filesize 可能无关,不确定
  • max_input_time,如果 POST 耗时过长
  • max-input-nesting-level 如果你的数据是一个包含很多子级别的数组
  • max_execution_time,但很确定不是这样
  • memory_limit,因为您可能会达到超出子进程允许内存的大小
  • max_input_vars,如果你的数据数组有很多元素

取自:https://stackoverflow.com/a/9691395/2853903

【讨论】:

  • 感谢您回答有关 jQuery Ajax 限制的问题,这是我问题的核心。
  • 如果您也可以接受答案,我们将不胜感激。 :P
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多