【问题标题】:jqgrid return error 404 when pass long parameterjqgrid在传递long参数时返回错误404
【发布时间】:2015-08-17 06:32:06
【问题描述】:

好吧,当我在 get 方法中的参数很短时,我的表单中的 jqgrid 可以正常工作。
但是当我的参数这么长时

  • 约4850个字符
  • 它返回错误 404 not found 并且我的 webmethod 没有触发。
  • 据我所知,查询字符串长度没有限制。
  • 查询字符串有限制吗?
  • 这个问题有解决办法吗?

感谢和抱歉我的英语不好
编辑
这是我的代码:

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" });


网格一开始是空的。当用户选择参数并提交按钮时,此方法将运行

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();


这是工作时的请求标头:

发布 /Handler/BrnTotal.ashx?startDate=1394/05/26&endDate=1394/05/26&brlist=32,50,61&selectedBrnWork=1 HTTP/1.1

这是它不起作用的时候:

发布 /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 因为它太长了

【问题讨论】:

标签: jquery asp.net jqgrid webmethod


【解决方案1】:

在我看来,这个问题与 jqGrid 无关。如果您需要向WebMethod 发送许多(或长)参数,则应使用 HTTP POST 而不是 HTTP GET,因为 GET 请求的参数将附加到 URL。 URL 大小有限制。 URL 的确切最大长度取决于您使用的网络浏览器。安全限制约为 2000 个字符(例如,请参阅 the answer)。

因此,如果未指定 mtype,我建议您使用 mtype: "POST" 而不是 jqGrid 使用的默认 mtype: "GET"

更新:您以错误的方式发送参数。发布的代码只是将参数startDateendDatebrlist显式添加到 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(); }
}

【讨论】:

  • 感谢您的回复,我将 mtype 更改为“POST”,但仍然无法正常工作。我应该更改其他内容吗?
  • @siavash:首先,您应该将您的问题附加到您使用的代码中。仅仅猜测你在做什么是很困难的。此外,我建议您使用Fiddler 或 IE 或 Chrome 的开发者工具(按 F12 启动)进行 HTTP 跟踪(监控网络流量)。如果您会看到将发送到服务器并返回的确切内容,您可以快速定位错误。
  • 我编辑了我的问题并添加了我的代码,请你检查一下
  • @siavash:您应该使用postData 来扩展将在正文请求中发送到服务器的参数。如果您使用mtype: 'GET',则参数将附加到URL,但如果您使用mtype: 'GET',它将正确放置在正文中。请参阅我的回答的已更新部分。
  • @siavash:您在代码中使用的colModel 似乎是错误的:colModel: ['blah','blah','blah',]。我希望它只是虚拟的,并且您使用正确的值。我在postData 中另外修复了selectedBrnWork。我希望你已经发现了问题。
猜你喜欢
  • 2013-08-30
  • 2011-09-30
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多