2012-10-17 8 views
6

Używałem postData do dynamicznego ustawiania parametrów żądań. Po kliknięciu jakiegoś zewnętrznego przycisku zmieniam adres URL siatki, a także ustawię kilka dodatkowych parametrów w następujący sposób: postData. JqGrid wydaje się dołączać wszystkie te parametry i dane dla wszystkich kolejnych żądań. Czy istnieje sposób, w jaki możemy kontrolować lub unikać wysyłania tych parametrów za każdym razem?jqgrid - postData przesyła poprzednie żądania i dane.

Moja definicja grid:

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

Tutaj we wniosku postu: Widzę, że name, rate params idą wraz z innymi standardowymi parametrami jqGrid jak sortname, sidx, rows itd ...

Teraz po kliknięciu zewnętrznego przycisku, jeśli zmienię adres URL siatki, jak poniżej:

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

}); 

Teraz jqGrid wysyła name, szybkość, msgIds params

Teraz, jeśli mogę zmienić adres URL z powrotem do rates.html powiedzieć na przykład, kliknięcie ikony odświeżania jqGrid wysyła poprzednią msgIds param a także wcześniejsze wartości. Nie chcę wysyłać poprzednich żądań w nowym żądaniu po zmianie adresu URL. Czy istnieje sposób, aby to osiągnąć?

Odpowiedz

6

Jeśli poprawię zrozumienie Twojego problemu, powinieneś unikać używania setGridParam i zamiast tego wykonaj następujące czynności. Możesz użyć $('#grid').jqGrid("getGridParam", "postData"), aby uzyskać odniesienie do wewnętrznego parametru postData. Na przykład,

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

Więc można użyć delete myPostData.msgIds usunąć dowolną właściwość metody uprzednio dodanego przez setGridParam.

+0

Dziękuję Oleg.Wygląda na to, że musimy ręcznie usunąć parametr obiektu po zakończeniu ładowania. Po zakończeniu ładowania ręcznie zresetowałem parametr do wartości null, usuwanie jest lepszym rozwiązaniem. Dzięki .. – varaprakash

+0

@varaprakash: Nie ma za co! – Oleg

+0

Próbowałem tego, ale 'myPostData' jest zawsze * niezdefiniowany * - czy czegoś mi brakuje po mojej stronie? – Matt

0

udało mi się rozwiązać to w ten sposób:

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 

Różnica polega na tym, że określenie datatype The url i page całkowicie w moją prośbę - co sprawiło, że działa!

nazywam tę funkcję tak:

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

kiedy dane wymagają aktualizacji. Pominięcie typu danych na przykład spowoduje, że odświeżenie zakończy się po cichu.

1

Miałem ten sam problem z zachowaniem parametrów postdata z poprzednich żądań.

Naprawiłem to, najpierw usuwając dane postData, a następnie ustawiając postData z nowymi parametrami.

czyszczenie postData => $ ('# grid1'). SetGridParam ({postData: ""});

ustawienie postData z nowymi parametrami =>

var formValues ​​= {searchVal: "ABC", państwo: "US"} $ ('# grid1') setGridParam. ({PostData: formValues});

Powiązane problemy