需要在jgrid jquery插件中覆盖搜索过滤器url param(_search)吗?

时间:2010-09-26 02:06:44

标签: javascript jquery jqgrid jqgrid-asp.net jqgrid-php

您好我已经使用此插件创建了一个用户消息页面。 网格将显示用户收件箱和用户发件箱(已发送)邮件。这是一个小代码:

    jQuery(document).ready(function() {

       //...some stuff
       currentURL = function() {

            return 'json_member_mail.php?task='+ currentBox;
                    //where current box is either inbox or outbox
       }

       //... alot of stuff

       myGrid = jQuery("#list").jqGrid({

        url:currentURL(),
        datatype: 'json',
        mtype: 'GET',

        //      even more stuff  ....

       }).jqGrid('navGrid','#pager', 
        { 
                        the lil stuff....

            search:true,

                        //the dialog...
                 }

         // the dialog form editing whatever...

   );//grid


});//document.ready

所以当用户点击发件箱时会发生这样的事情:

jQuery("#list").jqGrid('setGridParam',{ url:currentURL(), postData:{lrt:lastReloadTime} }).trigger("reloadGrid"); //where current URL has the GET param task=outbox

在我使用搜索过滤器之前,它工作得很好。例如,我搜索从用户'foo'发送的消息,这一切都很好,但是当我点击发件箱时,它仍会尝试向我显示用户'foo'发送的消息,但我希望重置搜索过滤器。 / p>

我尝试在文档就绪上加载搜索对话框,然后立即将其关闭以获取过滤器()。重置以及所有这些但它不起作用:-buin-in-search-filter-box

myGrid.trigger( 'reloadGrid');

具有相同的行为
.jqGrid('setGridParam',{    url:currentURL(), postData:{_search:'false'} }).trigger("reloadGrid"); 

会解决我的问题但它不会覆盖_search参数。

任何慷慨的建议?

2 个答案:

答案 0 :(得分:1)

我建议您不要使用函数调用作为url参数的值。在网格初始化期间,参数的值仅会被计算一次。而不是你可以使用

url: 'json_member_mail.php',
postData: {
    task: function() {/* return currentBox based on criterias which you have */},
    lrt: lastReloadTime
}

如果需要,您也可以将属性lrt作为一个函数。

如果postData的某些属性是函数,则会在任何ajax请求上调用该函数。因此,您可以在搜索,分页,排序或网页重新加载时使用{{>>实际值currentBox

如果您需要重新加载jqGrid,则无需更改urlpostData,您只需拨打trigger("reloadGrid")即可。

答案 1 :(得分:0)

大声笑,所以我犯了一个愚蠢的错误...... 在原始消息中我说“//对话框表格编辑什么......”我犯了一个错误 是的,我甚至懒得把这部分写在这里,所以我在那里得到的是:

}).jqGrid('navGrid','#pager', 
        { 
            edit:false,
            add:false,
            del:false,
            search: true,
            refresh:true,
            refreshtext:"Refresh",
            searchtext:"Search"
        },
        {},//add 
        {}, //edit
        {}, //delete
            {},  <---instead of putting search options on this line
        {        <----I was putting it here on this line
            overlay:false,
            closeOnEscape:true,
                        afterShowSearch:... , 
        } /* allow the view dialog to be closed when user press ESC key*/
    );//grid

然而我意识到在我看到叠加层后用黑客修复了我的问题:false无法正常工作且仍有jQuery UI叠加层用于搜索......

我所做的对于某一天阅读这一天的人来说可能会有所帮助,所以我做的是:

有一个get参数nd是一个Unix时间戳(POSIX),但是在几毫秒内(javascripts实现)不像php和mysql以及大多数unix东西(以秒为单位)。我还发送了上次点击的任何导航链接的时间戳:

lastReloadTime = new Date().getTime() ;
jQuery("#list").jqGrid('setGridParam',{ 
        url:currentURL(), 
        postData:{lrt:lastReloadTime
} 

然后在我生成json数据的php文件中:

$searchOK = 1;

if($_GET['_search']=='true') {

    if( isset($_GET['lrt']) ){ 

    //so here I check to see if the main mail links have been clicked at all
    //from the time of the first page load 
    //if not then its all good but if it has check for the time

        if(   (    ($_GET['nd']/1000)-($_GET['lrt']/1000)    ) < 1) $searchOK=0;
    }

    if($searchOK){ //you can do search since it might be going through pages of a search result