【问题标题】:Jquery Ajax - post huge string valueJquery Ajax - 发布巨大的字符串值
【发布时间】:2013-07-22 12:22:09
【问题描述】:

我需要发布一个大约 3mb 的巨大字符串,是否可以使用不使用 url 参数将其发送到 php?

如果我在 url 参数中发送它,则请求达到 url 中的大小限制。

如何解决这个问题?有什么线索吗?

非常感谢。

其实我是这样做的:

$.ajax({
 type:'POST',
.......
data:{string:3MB_string}
});

我正在使用 PHP 和 jQuery,我希望通过一个简单的 url 将 3mb base64 字符串发送到 php,例如 site.com/script.php

字符串是 File Reader API base64 图像

这是一个字符串示例,但它不会达到大小限制,它不是 3mb,因此在粘贴时显示 3mb,http://jsfiddle.net/QSyMc/

【问题讨论】:

    标签: javascript jquery ajax post


    【解决方案1】:

    你肯定需要使用 POST 方法。如果字符串仍然很大,请检查 php.ini 文件以找出最大 POST 参数大小。

    要更改此值,请执行以下任一操作:

    1.更改 php.ini 中的值

    post_max_size=20M
    upload_max_filesize=20M
    

    2。或将此代码添加到 .htaccess 文件中

    php_value post_max_size 20M
    php_value upload_max_filesize 20M
    

    使用哪一个取决于您可以访问的内容。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。这不是查询字符串的长度,而是我传递给服务器的变量数量。 php.ini 将 max_input_vars 字段限制为 1200 个变量。就我而言,我超过了这个数量而不是 post_max_size 数量。不得不回去使查询更有效率并且在限制之下。我想我本可以提高 php.ini 设置,但通过禁用非必要的查询参数,我得到了更好的代码。

      【讨论】:

        【解决方案3】:

        尝试将processData 设置为 false 和 JSON 的字符串表示

        var data = { "some" : "data" };
        $.ajax({
            type: "POST",
            url: "/script",
            processData: false,
            contentType: 'application/json',
            data: JSON.stringify(data),
            success: function(r) {
               console.log(r);
            }
        });
        

        来自jQuery.ajax 文档:

        processData(默认:true)

        类型:布尔值

        默认情况下,传入的数据 将数据选项作为对象(技术上,除了 string) 将被处理并转化为查询字符串,适合 到默认的内容类型“application/x-www-form-urlencoded”。如果 要发送 DOMDocument 或其他未处理的数据,请设置此 选项为 false。

        【讨论】:

        • 您能否补充一些解释,说明您为什么认为这是必要的或为什么会起作用?
        • var data = { "some" : "data" };一半 json,一半对象?
        【解决方案4】:

        试试这个:

        var str = "YOUR STRING";
        $.ajax({
            url: 'YOUR URL',
            type: 'POST',
            data: { mystring: str },
            success: function(result) {
                console.log(result);
            }
        });
        

        【讨论】:

          【解决方案5】:

          您将需要使用 POST 请求:

          $.ajax({
              url: '/script.php',
              type: 'POST',
              data: { value: 'some huge string here' },
              success: function(result) {
                  alert('the request was successfully sent to the server');
              }
          });
          

          并在您的服务器端脚本中检索值:

          $_POST["value"]
          

          您还可能需要增加允许的请求大小。例如,在您的.htaccess 文件或php.ini 中,您可以设置post_max_size 值:

          #set max post size
          php_value post_max_size 20M
          

          【讨论】:

          • 我已经以这种方式发送了:P @Darin Dimitrov,这导致达到 url 大小限制
          • 我的意思是我得到控制台“你达到了请求限制”
          • 您可能还需要增加允许的最大请求大小。我已经更新了我的答案来说明这一点。
          • @DarinDimitrov 链接为您解答:php.net/manual/en/ini.core.php#ini.post-max-size
          • @bombastic 我在解释为​​什么它没有在 URL 参数中发送。 URL 在open() 方法中发送,而不是send() 方法。当您在 jQuery 中指定 type: 'POST' 时,您是在告诉它您希望将 data 作为有效负载发送,而不是作为 url 参数发送。
          猜你喜欢
          • 2019-02-03
          • 2017-05-05
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 2012-06-14
          • 2011-08-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多