当loadError
返回错误时,似乎没有触发jqGrid事件GET
:
414 Request-URI Too Long
可以通过附加大于2048字节的数据的后期数据来再现它。
也许有人知道如何在jqGrid中使用POST
而不是GET
请求?
$grid.jqGrid({
url:'/greenarrow_campaign_statistics/get_all_for_grid',
datatype: "json",
mtype: "POST",
colNames:['Campaign Name', 'Last Date', '# of mailings', 'Recipients', 'Hard bounces', '%', 'Opens', '%', 'Clicks', '%', 'Upgrades', '%', 'FBL Compl.', '%'],
colModel :[
{name:'campaign_name', index:'campaign_name', width:220, sorttype:'text',align:'left',fixed:true},
{name:'finishtime_str', index:'finishtime_sec', width:140, sorttype:'number',align:'center',fixed:true},
{name:'count', index:'mailings_cnt', width:70, sorttype:'number',align:'right',fixed:true,hidden:true},
{name:'recips_total', index:'recips_total', width:75, sorttype:'number',align:'right',fixed:true},
{name:'num_bounces_hard', index:'num_bounces_hard', width:60, sorttype:'number',align:'right',fixed:true},
{name:'num_bounces_hard_perc', index:'num_bounces_hard_perc', width:40, sorttype:'number',align:'right',fixed:true, formatter: percFormatter},
{name:'num_opens', index:'num_opens', width:75, sorttype:'number',align:'right',fixed:true},
{name:'num_opens_perc', index:'num_opens_perc', width:40, sorttype:'number',align:'right',fixed:true, formatter: percFormatter},
{name:'num_clicks', index:'num_clicks', width:70, sorttype:'number',align:'right',fixed:true},
{name:'num_clicks_perc', index:'num_clicks_perc', width:40, sorttype:'number',align:'right',fixed:true, formatter: percFormatter},
{name:'num_upgrade', index:'num_upgrade', width:60, sorttype:'number',align:'right',fixed:true},
{name:'num_upgrade_perc', index:'num_upgrade_perc', width:40, sorttype:'number',align:'right',fixed:true, formatter: percFormatter},
{name:'num_fbl', index:'num_fbl', width:60, sorttype:'number',align:'right',fixed:true},
{name:'num_fbl_perc', index:'num_fbl_perc', width:40, sorttype:'number',align:'right',fixed:true, formatter: percFormatter}
],
rowList:[20, 30, 50, 100, 500],
pager: '#pager',
rowNum:20,
shrinkToFit: true,
sortname: 'finishtime_sec',
viewrecords: true,
sortorder: "desc",
toolbar: [true, 'top'],
multiselect: true,
multiboxonly: true,
footerrow: true,
userDataOnFooter: true,
height: "auto",
caption:"",
beforeRequest: function()
{
$grid.jqGrid(
'appendPostData',
{
period: $period.val(),
from: $('#start_date').val(),
to: $('#end_date').val(),
campaigns: $('input[name="campaign_names"]').val(),
search_text: $('#search_text').val()
});
},
ondblClickRow: function(id)
{
$('#btn_edit').trigger('click');
},
loadComplete: function(data) {
$("tr.jqgrow:odd").css("background", "#DDDDDC");
},
loadError: function(xhr, status, error) {
jQuery("#rsperror").html("Type: " + status + "; Response: " + xhr.status + " " + xhr.statusText);
}
})
答案 0 :(得分:0)
如果你检查jqGrid的源代码(参见the lines),你可以看到jqGrid只使用jQuery.ajax。所以它可能是您使用的jQuery版本中的一个问题。
无论如何,问题的根源可能是使用HTTP GET而不是使用HTTP POST。 GET请求的所有参数都将附加到URL(?p1=v1&p2=v2&p3=v3...
)。 URL长度存在限制,在不同的浏览器和不同的Web服务器中有所不同(请参阅here)。例如,Internet Explorer的最大URL长度为2,083个字符(请参阅here)。其他Web浏览器还有另一个URL限制(例如,请参阅here)。
从设计的角度来看,如果URL的总大小可能大于2K(2048个字符),则严格建议使用POST而不是GET。如果您对HTTP 414错误没有任何问题。
因此,您应修改服务器代码以回复POST请求,并包含jqGrid的mtype: "POST"
选项(或将mtype: "GET"
替换为mtype: "POST"
)。