传递长参数时jqgrid return错误404
jqgrid return error 404 when pass long parameter
嗯,当我的get方法中的参数很短时,我的表单中的jqgrid工作正常。
但是当我的参数这么长的时候
- 约 4850 个字符
- 它 returns 找不到错误 404,我的 web 方法没有启动。
- 据我所知,查询字符串的长度没有限制。
- 查询字符串有限制吗?
- 这个问题有解决办法吗?
感谢并抱歉我的英语不好
编辑
这是我的代码:
jQuery("#jqGridReport").jqGrid({
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
direction: 'rtl',
url: 'Handler/BrnTotal.ashx',
datatype: "local",
colNames: ['blah','blah','blah'],
colModel: ['blah','blah','blah',],
rowNum: 50,
mtype: 'POST',
loadonce: true,
pager: '#jqGridReportPager',
sortname: 'BRName',
viewrecords: false,
pgtext: null,
sortorder: 'desc',
caption: "شعب",
hidegrid: false,
scrollOffset: 0,
autowidth: true,
altRows: true,
altclass: 'myAltRowClass'
});
jQuery("#jqGridReport").jqGrid('navGrid', '#jqGridReportPager', { edit: false, add: false, del: false });
jQuery("#jqGridReport").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn" });
first.when 用户 select 参数和提交按钮处的网格为空,此方法将 运行
branchlist = idsel.join(",");
selectedBrnWork = $('#hiddenField').val();
startDate = $("#txtStartDate").val();
endDate = $("#txtEndDate").val();
$("#jqGridReport").jqGrid('setGridHeight', 'auto');
var newurl = 'Handler/BrnTotal.ashx?startDate=' + startDate + "&endDate=" + endDate + "&brlist=" + branchlist + "&selectedBrnWork=" + selectedBrnWork;
$("#jqGridReport").jqGrid('setGridParam', { url: newurl });
$("#jqGridReport").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
$("#element_to_pop_up").bPopup().close();
这是请求 header 工作时:
POST
/Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61&selectedBrnWork=1
HTTP/1.1
这是它不起作用的时候:
POST
/Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61,73,84,92,103,148,149,160...,...,...,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2124,2175,2176,2177,2178,2179,2180,2181,2182,2183&selectedBrnWork=1
HTTP/1.1
我做空 brlist 因为它太长了
在我看来,这个问题与 jqGrid 无关。如果您需要向 WebMethod
发送许多(或长)参数,您应该使用 HTTP POST 而不是 HTTP GET,因为 GET 请求的参数将附加到 URL。 URL 大小有限制。 URL 的确切最大长度取决于您使用的网络浏览器。安全限制约为 2000 个字符(参见 the answer 示例)。
因此,如果未指定 mtype
,我建议您使用 mtype: "POST"
而不是 jqGrid 默认使用的 mtype: "GET"
。
更新: 你发送参数的方式不对。发布的代码只是将参数 startDate
、endDate
、brlist
明确地 添加到 URL。这是错的。数据应在 POST 请求的正文中发送。您应该为此使用 jqGrid 的 postData
参数。我建议您使用函数形式的 postData
:
url: 'Handler/BrnTotal.ashx',
datatype: "json",
mtype: 'POST',
postData: {
startDate: function () { return $("#txtStartDate").val(); },
endDate: function () { return $("#txtEndDate").val(); },
brlist: function () {
var idsel = jQuery("#jqGridReport").jqGrid("getGridParam", "selarrrow");
return idsel.join(",");
},
selectedBrnWork: function () { return $('#hiddenField').val(); }
}
嗯,当我的get方法中的参数很短时,我的表单中的jqgrid工作正常。
但是当我的参数这么长的时候
- 约 4850 个字符
- 它 returns 找不到错误 404,我的 web 方法没有启动。
- 据我所知,查询字符串的长度没有限制。
- 查询字符串有限制吗?
- 这个问题有解决办法吗?
感谢并抱歉我的英语不好
编辑
这是我的代码:
jQuery("#jqGridReport").jqGrid({
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
direction: 'rtl',
url: 'Handler/BrnTotal.ashx',
datatype: "local",
colNames: ['blah','blah','blah'],
colModel: ['blah','blah','blah',],
rowNum: 50,
mtype: 'POST',
loadonce: true,
pager: '#jqGridReportPager',
sortname: 'BRName',
viewrecords: false,
pgtext: null,
sortorder: 'desc',
caption: "شعب",
hidegrid: false,
scrollOffset: 0,
autowidth: true,
altRows: true,
altclass: 'myAltRowClass'
});
jQuery("#jqGridReport").jqGrid('navGrid', '#jqGridReportPager', { edit: false, add: false, del: false });
jQuery("#jqGridReport").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn" });
first.when 用户 select 参数和提交按钮处的网格为空,此方法将 运行
branchlist = idsel.join(",");
selectedBrnWork = $('#hiddenField').val();
startDate = $("#txtStartDate").val();
endDate = $("#txtEndDate").val();
$("#jqGridReport").jqGrid('setGridHeight', 'auto');
var newurl = 'Handler/BrnTotal.ashx?startDate=' + startDate + "&endDate=" + endDate + "&brlist=" + branchlist + "&selectedBrnWork=" + selectedBrnWork;
$("#jqGridReport").jqGrid('setGridParam', { url: newurl });
$("#jqGridReport").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
$("#element_to_pop_up").bPopup().close();
这是请求 header 工作时:
POST /Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61&selectedBrnWork=1 HTTP/1.1
这是它不起作用的时候:
POST /Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61,73,84,92,103,148,149,160...,...,...,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2124,2175,2176,2177,2178,2179,2180,2181,2182,2183&selectedBrnWork=1 HTTP/1.1
我做空 brlist 因为它太长了
在我看来,这个问题与 jqGrid 无关。如果您需要向 WebMethod
发送许多(或长)参数,您应该使用 HTTP POST 而不是 HTTP GET,因为 GET 请求的参数将附加到 URL。 URL 大小有限制。 URL 的确切最大长度取决于您使用的网络浏览器。安全限制约为 2000 个字符(参见 the answer 示例)。
因此,如果未指定 mtype
,我建议您使用 mtype: "POST"
而不是 jqGrid 默认使用的 mtype: "GET"
。
更新: 你发送参数的方式不对。发布的代码只是将参数 startDate
、endDate
、brlist
明确地 添加到 URL。这是错的。数据应在 POST 请求的正文中发送。您应该为此使用 jqGrid 的 postData
参数。我建议您使用函数形式的 postData
:
url: 'Handler/BrnTotal.ashx',
datatype: "json",
mtype: 'POST',
postData: {
startDate: function () { return $("#txtStartDate").val(); },
endDate: function () { return $("#txtEndDate").val(); },
brlist: function () {
var idsel = jQuery("#jqGridReport").jqGrid("getGridParam", "selarrrow");
return idsel.join(",");
},
selectedBrnWork: function () { return $('#hiddenField').val(); }
}