今天在做与后台交互的的过程中,发现php对于接收的POST有一个限制,超出1000个字段之后便无法接收,项目要求在不改变PHP配置的情况下通过前端方式解决,通过分析并且网上差一些大牛的资料终于找到了解决方案,下面进行介绍:

  首先,由于post的数据太多会导致PHP无法接收,那么解决思路就是将form表单中要进行提交的数据封装为一个json字段提交到后台,为了其他表单也会出现这样的问题,则将该方法封装为jQuery扩展的一个方法:

  

 // submitButtonId 提交按钮id,formID表单id,formUrl表单提交url,
setSerializeForm: function(submitButtonId, formID, formUrl, callback, clickFn)
{
if($.isFunction(clickFn))
{
clickFn();
} var $submitButton = $(submitButtonId);
$(document).on('click', submitButtonId, function(event) {
$submitButton.val(v.submitting);
$submitButton.attr('disabled', true); // serializeArray() 方法通过序列化表单值来创建对象数组
// JSON.stringify 将任意的 JavaScript 值序列化成 JSON 字符串
var jsonData = $(formID).serializeArray();
var jsonStr = JSON.stringify(jsonData); $.post(formUrl, {'jsonStr':jsonStr}, function(response){
if(response.result == 'success'){
$submitButton.popover({trigger:'manual', content:response.message, placement:'right'}).popover('show');
$submitButton.next('.popover').addClass('popover-success');
if(response.locate){
setTimeout(function(){location.href = response.locate}, 1000);
}
} else {
$submitButton.attr('disabled', false);
$submitButton.val(v.saveOrder); if($.type(response.message) == 'object')
{
$.each(response.message, function(key, value)
{
var errorOBJ = '#' + key;
var errorLabel = key + 'Label'; if (typeof value == 'string' || Object.prototype.toString.call(value).indexOf('Array')>0)
{
var errorContent = $.type(value) == 'string' ? value : value.join(';');
var errorMSG = '<span id="' + errorLabel + '" for="' + key + '" class="text-error red">';
errorMSG += errorContent;
errorMSG += '</span>';
}
else
{
var errorContent = '';
for (var error in value)
{
errorContent += value[error];
errorContent += ';'
}
errorContent.replace('。','')
var errorMSG = '<tr id='+ errorLabel + '><td colspan=13><span for="' + key + '" class="text-error red">';
errorMSG += errorContent;
errorMSG += '</span></td></tr>';
} $('#' + errorLabel).remove(); var $errorOBJ = $(errorOBJ);
if($errorOBJ.closest('.input-group').length > 0)
{
$errorOBJ.closest('.input-group').after(errorMSG)
}
else if(Object.prototype.toString.call(value).indexOf('Object')>0)
{
$errorOBJ.after(errorMSG);
}
else
{
$errorOBJ.parent().append(errorMSG);
}
$errorOBJ.css('margin-bottom', 0);
$errorOBJ.css('border-color','#953B39');
if($errorOBJ[0].id.indexOf('products') >= 0)
{
var index = parseInt($errorOBJ.index("tr[id *= 'products']")) - errorLabelTotal;
errorLabelTotal++;
var $actionItem = $('.actionList-item:eq('+index+')');
$actionItem.css('margin-bottom','28px');
} $(errorOBJ).change(function()
{
$('#' + errorLabel).remove();
});
});
} else {
$submitButton.popover({trigger:'manual', content:response.message, placement:'right'}).popover('show');
$submitButton.next('.popover').addClass('popover-danger');
function destroy(){$submitButton.popover('destroy')}
setTimeout(destroy,3000);
}
}
if($.isFunction(callback)) return callback(response);
}, 'json');
});
}

  在调用该方法时只需要通过以下方式:

 $.setSerializeForm('#submitOrder', '#orderAjaxForm', v.formUrl);

解决PHP无法接收post超过1000个字段的问题的更多相关文章

  1. php post提交超过1000个字段的时候服务器会截断多余部分

    采取将子字段转化为json的形式,合并多个字段于一个字段

  2. oracle select in超过1000条报错解决方法

    本博客介绍oracle select in超过1000条数据的解决方法,java框架是采用mybatis的,这可以说是一种比较常见的错误:select * from A where id in(... ...

  3. 处理 Oracle SQL in 超过1000 的解决方案

    处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项就会报错.这主要是oracle考虑性能问题做的限制.如果要解 ...

  4. Oracle SQL in 超过1000 的解决方案

    处理 Oracle SQL in 超过1000 的解决方案 处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项 ...

  5. 关于Highcharts数据量超过1000时无法显示问题

    今天在vue的项目中引入Highcharts,想做一个大数据量的实时刷新曲线图,发现当数据量超过1000就无法显示. 经过排查发现 Highcharts为了保证更好的性能设置了一个性能阈值检查,当数据 ...

  6. IN中超过1000处理

    后台 所有用到IN的方法,都要考虑超过1000的可能 if(cameraIds != null && cameraIds.length > 0){sql.append(" ...

  7. oracle中的in参数超过1000的解决方案

    在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出"java.sql.SQLException: ORA-01795: 列表中 ...

  8. 解决pdm打开只显示表名不显示字段的步骤

    解决pdm打开只显示表名不显示字段的方法 选中PDM 依次点击 工具-->显示参数选择-->content 下面的table ,右边勾选上columns 点击OK 选择 all symbo ...

  9. mysql的if用法解决同一张数据表里面两个字段是否相等统计数据量。

    MySQL的使用用法如下所示:格式:if(Condition,A,B)意义:当Condition为true时,返回A:当Condition为false时,返回B.作用:作为条件语句使用.mysql的i ...

随机推荐

  1. 自动发表QQ空间说说

    require("gb2312toutf8") local http = require "socket.http" local surl = "ht ...

  2. MAC进入文件夹快捷键

    common + O common+up common+Down shift + common +G

  3. python之道05

    1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...

  4. Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo

    Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: ‘\xE5\x8F\xB0\xE5\xBC\x8F…’ fo 分析如下: 首先通过语句 ...

  5. javase(13)_网络编程

    一.概述 1.网络编程的核心是IP.端口(表示应用程序).协议三大元素 2.网络编程的本质是进程间通信 3.网络编程的2个主要问题:1是定位主机,2是数据传输 二.网络通信的概念 1.网络通信协议 计 ...

  6. 响应式web设计视图工具及插件总结----20150113

    响应式web设计可以说火不火是迟早的,下面就对于最开始的视口调试的方法汇总,希望有好的方法大家一起交流. 1.火狐:从Firefox升级到29.0之后就不直接支持Firesizer了. 先安装Add- ...

  7. 【树链剖分 差分】bzoj3626: [LNOI2014]LCA

    把LCA深度转化的那一步还是挺妙的.之后就是差分加大力数据结构了. Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1.设dep ...

  8. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式

    1.Java多线程的概念 同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程.他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得C ...

  9. centos7系统root无法通过su切换到某个普通用户

    [root@test ~]# su webappsu: failed to execute /bin/bash: Resource temporarily unavailable [root@test ...

  10. lnmp一键安装包 虚拟主机问题

    lnmp一键安装包淌过的坑  --手动虚拟主机配置 安装一键包的时候教程 官网也有虚拟主机的教程 一下示例: 后来自己手动去做 就遇到了一个大家都遇到的问题 及时安装让nginx支持解析PHP脚本解析 ...