【问题标题】:Set Url on loadBeforeSend in jqGrid在 jqGrid 中的 loadBeforeSend 上设置 Url
【发布时间】:2011-06-09 21:59:56
【问题描述】:

我有一个用于将 json 数据返回到我的 jqgrid 的大量报告的 wcf 服务。一切都按预期工作。但是,由于每个报告查询的大量用户输入,我选择使用与我在服务器上设置的一系列“输入模型”匹配的 json 字符串。我不想在我的路由中弄乱冗长复杂的查询字符串。

问题:如何添加 jqGrid 查询字符串参数做我上传到服务器的 json 字符串?我试过'loadBeforeSend',但我似乎无法覆盖ajax url。我不能为 url 参数使用函数,因为网格参数尚不可用。有任何想法吗?谢谢。

我的 jqGrid 函数(为简洁起见):

function loadGrid() {
        var tbl = $('#tbl');
        tbl.jqGrid({
            loadBeforeSend: function () {
                var ai = {
                    dateFrom: dbDateTime($('#at-datefrom').val()),
                    dateTo: dbDateTime($('#at-dateto').val()),
                    sidx: tbl.getGridParam('sortname'),
                    sord: tbl.getGridParam('sortorder'),
                    page: tbl.getGridParam('page'),
                    rows: tbl.getGridParam('rowNum')
                };
                var newUrl = getBaseURL() + 'ReportingService.svc/report/?json=' + JSON.stringify(ai);
                tbl.jqGrid().setGridParam({ url: newUrl });//Everything works perfect up to this point. All the values are in my json string and my url is correct. 
            },
            url: '', //Empty because I need to override it
            datatype: 'json',
            mtype: 'GET',
            ajaxGridOptions: { contentType: 'application/json' },
            loadError: function (xhr, status, error) { alert(status + "" + error); }
        }).navGrid('#attendance-pager', { edit: false, add: false, del: false });
    }

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    如果您使用mtype: 'GET' 和neew 只是设置附加到URL 的附加参数,您可以使用jqGrid 的postData 参数。如果将postData 定义为函数,您将获得最佳结果(有关详细信息,请参阅here)。

    另一种方法是使用beforeRequest,其中this 将设置为网格DOM 元素,您可以根据this.p.url 访问(并根据需要更改)jqGrid 的url 参数。您当然可以使用$(this).jqGrid('setGridParam','url',yourNewUrl);,而不是直接更改this.p.url

    我不建议您在您的情况下使用 datatype 作为函数。顺便说一句,如果使用 datatype 作为函数,则不能使用 beforeRequest

    【讨论】:

    • 为什么不推荐使用数据类型函数?到目前为止,它对我来说一直很好。谢谢奥列格。
    • @nameEqualsPNamePrubeGoldberg:您的问题的答案可能很长。这种方式有很多缺点。主要原因是您没有使用更直接的方法。您的问题就像一个问题,为什么要使用门钥匙而不是使用窗户。答案是:因为你有门的钥匙,而且它是通过门进入房子的方式,这是设计的方式。这是最直接、最简单的方法。你之前从窗户进了房子,它起作用了。好的,但是通过窗口的方式应该只在极端情况下使用,而不是在普通情况下使用。
    • @nameEqualsPNamePrubeGoldberg:jqGrid 旨在读取 XML 数据和几乎任何类型的 JSON 数据。如果你有一些其他类型的数据,你应该使用数据类型作为函数。
    【解决方案2】:

    我讨厌回答我自己的问题,但是 Matthew 提供的这个 answer 非常有效。这个问题有点模棱两可,但无论如何。

    简而言之,您需要从 'datatype' 参数调用外部 ajax 函数。因为 jqGrid 现在已加载(尽管没有任何数据),所以您可以从用户输入(即记录集的第 3 页、排序“desc”等)中捕获参数数据并将其添加到您的 json 字符串中。

    这为您的服务提供了一条真正简单的 uri 路由。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多