2012-10-17 19 views
6

Tôi đã sử dụng postData để đặt tham số yêu cầu động. Khi nhấp vào một số nút bên ngoài, tôi thay đổi URL lưới và cũng đặt một số thông số bổ sung trong postData như dưới đây. JqGrid dường như nối thêm tất cả các thông số này và dữ liệu của nó cho tất cả các yêu cầu tiếp theo. Có cách nào chúng tôi có thể kiểm soát hoặc tránh các thông số này được gửi mỗi lần không?jqgrid - postData gửi thông số và dữ liệu yêu cầu trước đó

định nghĩa lưới của tôi:

jQuery(function() { 
    $('#grid').jqGrid({ 
    url: 'rates.html', 
    postData: { 
     name: function() { return $("#name").val(); }, 
     rate: function() { return $("#rate").val(); }, 
       ..... 
     } 
     .... 
    }); 
}); 

Ở đây trong bài yêu cầu: Tôi thấy rằng name, rate params đang đi cùng với các thông số jqGrid tiêu chuẩn khác như sortname, sidx, rows, vv ...

Bây giờ, nếu nhấp vào nút bên ngoài, nếu tôi thay đổi URL lưới như sau

$('#changeReqBtn').click(function() { 
     $('#grid').setGridParam({ url: 'changeReq.html', 
           postData: { msgIds: msgIds } }); 
     $('#grid').trigger("reloadGrid");  

}); 

Bây giờ jqGrid gửi name, tỷ lệ, msgIds params

Bây giờ nếu tôi thay đổi URL trở lại rates.html nói ví dụ, trên bấm vào biểu tượng làm mới, jqGrid gửi msgIds param trước và cũng là giá trị trước đó. Tôi không muốn gửi thông số yêu cầu trước đó trong yêu cầu mới khi URL thay đổi. Có cách nào chúng ta có thể đạt được điều này?

Trả lời

6

Nếu tôi sửa vấn đề của bạn, bạn nên tránh sử dụng setGridParam và thực hiện các thao tác sau. Bạn có thể sử dụng $('#grid').jqGrid("getGridParam", "postData") để nhận được tham chiếu tham số nội bộ postData. Ví dụ,

var myPostData = $('#grid').jqGrid("getGridParam", "postData"); 

Vì vậy, bạn có thể sử dụng delete myPostData.msgIds xóa bất cứ tài sản của phương pháp thêm trước đó setGridParam.

+0

Cảm ơn bạn Oleg.Có vẻ như chúng ta cần phải loại bỏ thủ công tham số đối tượng sau khi tải lại xong. Tôi đã được đặt lại thủ công các tham số để null sau khi tải lại được thực hiện, xóa là một cách tiếp cận tốt hơn. Cảm ơn .. – varaprakash

+0

@varaprakash: Bạn được chào đón! – Oleg

+0

Tôi đã thử điều này nhưng 'myPostData' luôn luôn * không xác định * - có điều gì đó thiếu ở bên cạnh tôi không? – Matt

0

tôi đã có thể giải quyết nó theo cách này:

function triggerRefresh(wsParams) { 
    // determine ws path 
    var myGrid=$('#myjsTreeView'); 
    var urlData = "/myWebService.asmx/myWebServiceMethod"; 
    // note: you need to pass url, datatype, postdata 
    var gridParam = { url: urlData, datatype: "json", postData: wsParams, page: 1 };       
    myGrid.jqGrid('setGridParam', gridParam).trigger("reloadGrid"); 
} // function 

Sự khác biệt là tôi chỉ định datatype, các urlpage hoàn toàn trong yêu cầu của tôi - mà làm cho nó hoạt động!

tôi gọi chức năng này như sau:

var myparams = $.toJSON({ para1: someValue, para2: someOtherValue }); 
triggerRefresh(myparams); 

khi tôi yêu cầu các dữ liệu được cập nhật. Bỏ qua các kiểu dữ liệu ví dụ sẽ gây ra làm mới thất bại âm thầm.

1

Tôi có cùng một vấn đề về việc lưu giữ các tham số postdata từ các yêu cầu trước đó.

Tôi đã sửa nó bằng cách xóa dữ liệu bài đăng trước và sau đó đặt postData với thông số mới.

xóa bài đăngData => $ ('# grid1'). SetGridParam ({postData: ""});

thiết POSTDATA với các thông số mới =>

var formValues ​​= {searchVal: "abc", đất nước: "Mỹ"} $ ('# grid1') setGridParam. ({POSTDATA: formValues});

Các vấn đề liên quan