如何在Jqgrid中停止url发送(setGridParam)请求?

时间:2015-04-14 08:43:58

标签: jquery jqgrid jqgrid-php

我创建了外部三个复选框。

首先我检查男性复选框,将请求发送到后端,响应时间为30到50秒。但突然我按下女性复选框,而不是将女性值参数发送到后端。

所以我想停止发送请求。使用新参数发送新请求。

发送新请求后,先前的请求已完成。

当我选中“全部”时,需要2-3分钟才能获取响应。在获得响应之前,不能设置/发送其他参数。 例如:如果我选中“全部”,我将无法发送参数以取消选中/选中“男性”或“女性”,直到我收到“全部”的回复。 我使用setGridParam并以JSON格式获取数据。

获取

需要2-3分钟
$("#sex,#age).change(function() {

var sexVal=$("#sex").val();
//sexVal values are Male, Female and All

var listURL='localset.php?mode=yes&sex='+sexVal;
$("#list451").jqGrid("clearGridData", true);
jQuery("#list451").jqGrid('setGridParam',{url : listURL,mtype:'POST',datatype:'json'}).trigger("reloadGrid");

});


jQuery("#list451").jqGrid({
    url: 'localset.php?mode=yes',
    datatype: "json",
    height: 255,
    width: 600,
    colNames: ['Index', 'Name', 'Code', 'N Name', 'C Name'],
    colModel: [{
            name: 'item_id',
            index: 'item_id',
            width: 65,
            sorttype: 'integer',
            searchoptions: {
                sopt: ['eq', 'ne', 'le', 'lt', 'gt', 'ge']
            }
        }, {
            name: 'name',
            index: 'name',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: [cn]
            }
        }, {
            name: 'code',
            index: 'code',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en']
            }
        }, {
            name: 'sex',
            index: 'sex',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: [cn]
            }
        }, {
            name: 'c_name',
            index: 'c_name',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: [cn]
            }
        },
        rowNum: 50,
        rowTotal: 200,
        rowList: [20, 30, 50],
        loadonce: true,
        mtype: "POST",
        rownumbers: true,
        rownumWidth: 40,
        gridview: true,
        pager: '#pager451',
        sortname: 'item_id',
        viewrecords: true,
        sortorder: "asc",
        caption: "External Check box Demo"
    }); jQuery("#list451").jqGrid('filterToolbar', {
    searchOperators: true
});

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想取消之前的Ajax请求。你应该做两件事:

  1. 禁用在Ajax请求开头创建的叠加层
  2. 执行挂起的Ajax请求的abort方法。
  3. 要删除叠加层并重置jqGrid用于内部目的的$("#list451")[0].grid.hDiv.loading,您只需拨打$("#list451")[0].endReq()

    例如,您可以使用loadBeforeSend回调来缓存最后一个Ajax请求的jqXHR。您只需将回调的第一个参数保存在外部作用域中的变量中。您可以调用abort()方法中止先前的请求。