Отправка дополнительной переменной на сервер с помощью dataUrl

Это должно быть простым решением, но я просто ничего не смог найти.

Я использую как postData, так и editData для отправки POST переменной на сервер для редактирования формы . Эта переменная используется в переключателе для выбора соответствующей функции. Этот php содержит ВСЕ функции для проекта. Я хочу избежать множества разных php-страниц.

Так что все в порядке, но я не могу найти способ сделать то же самое для dataUrl. Единственное, что я смог найти, это использовать ajaxSelectOptions, в частности параметр данных. Если это подходящий способ сделать это, как его использовать? Как это?:

ajaxSelectOptions:{ contentType: "application/json", dataType:'json', type:'POST', action: function(){ return 'popCodeAdjust'; } } 

В общем случае вы можете использовать свойство данных ajaxSelectOptions . Кулачок кода выглядит

 ajaxSelectOptions: { type: "POST", data: { action: "popCodeAdjust"; } } 

или

 ajaxSelectOptions: { type: "POST", data: { action: function () { return "popCodeAdjust"; } } } 

См. Здесь или здесь .

Проблема может возникнуть, если вам действительно нужно отправить данные в формате JSON . В этом случае вам может понадобиться либо сериализовать значение данных параметров (например, JSON.stringify({action: actionValue}) ), либо значение с именем параметра (например, action: JSON.stringify(actionValue) ). См. Ответ, в котором роль роли BodyStyle атрибут ( WebMessageBodyStyle.Wrapped , WebMessageBodyStyle.WrappedResponse т. Д.) В методе WCF в этом случае.

В jqGrid 4.4.2 или выше (см. Ответ , мой запрос на извлечение и исправление ) вы можете использовать функцию postData как функцию. Вы можете определить его либо внутри ajaxSelectOptions

 ajaxSelectOptions: { contentType: "application/json", dataType: "json", type: "POST", postData: function (rowid, value, name) { return JSON.stringify({action: "popCodeAdjust"}); //or depend on the relinquishment of the server side //return {action: JSON.stringify("popCodeAdjust")}); } } 

Вы можете указать postData альтернативы внутри editoptions (см. Здесь ).

Как насчет?

 $.ajax({ type: 'POST', url: 'url', data: { varName: JSON.stringify(arrayValues) }, dataType: 'json', success: function(msg) {...}, error: function(res, status, exeption) {...} }); 

Серверный:

 $var = json_decode($_POST['varName'], true); 

Внутри вашей настройки сетки это будет:

 postData: { KeyName: KeyValue }, 

Вы увидите, что этот дополнительный параметр выйдет с вашим POST.

В приведенном ниже примере будет установлено значение postData (если оно должно было измениться), а затем вызвать перезагрузку сетки.

 $('#gridName').jqGrid('setGridParam', { postData: { UserName: userName }).trigger('reloadGrid', [{ page: 1}]);