Это должно быть простым решением, но я просто ничего не смог найти.
Я использую как 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}]);