jQgrid публикует пользовательские данные при загрузке - PullRequest
2 голосов
/ 19 декабря 2011

Хотите знать, если кто-то использовал jQgrid для публикации динамических данных из другой формы на той же странице.Динамический в том смысле, что я не знаю входных имен для публикации, а просто разместил бы всю сериализованную форму при рендеринге сетки.

Я дошел до установки дополнительных данных в postData, но они не передаются в URL должным образом, так как они выглядят в двойном кодировании URL.См .:

$(document).ready(function() {
  $("#rpt").jqGrid( 
  { url:'/get.json',
   postData: {filter: $('form').serialize()}, 
  datatype: "json", 
  gridview: true,
  colModel:[id:'col1']
 });
});

Через различные темы здесь и на других сайтах я пробовал предложенные в форме JSON.stringify и serializearray (), а также пользовательские функции безрезультатно.Данные формы отображаются в зашифрованном виде и недоступны на другой стороне через _GET.

Любые предложения будут отличными - спасибо!

1 Ответ

1 голос
/ 20 декабря 2011

Я не уверен, в какой форме вы хотите получить данные из формы на стороне сервера. Тем не менее, я бы предложил вам использовать postData в следующей форме

postData: {
    filter: function () {
        var result = {}, i, item,
            formInfo = $('form#myForm').serializeArray(),
            l = formInfo.length;
        for (i = 0; i < l; i++) {
            item = formInfo[i];
            result[item.name] = item.value;
        }

        return JSON.stringify(result);
    }
}

В случае следующей формы теста

<form id="myForm">
  <div><input type="text" name="a" value="1 from a" id="a" /></div>
  <div><input type="text" name="b" value="2 from b" id="b" /></div>
  <div><input type="hidden" name="c" value="3 from c" id="c" /></div>
  <div>
    <textarea name="d" rows="8" cols="40">4</textarea>
  </div>
  <div><select name="e">
    <option value="5" selected="selected">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
  </select></div>
  <div>
    <input type="checkbox" name="f" value="8" id="f" />
  </div>
</form>

Переменная result будет

var result = {
    a: "1 from a",
    b: "2 from b",
    c: "3 from c",
    d: "4",
    e: "5"
}

Таким образом, преобразование данных не будет выполнено. Затем я предлагаю преобразовать объект result в строку JSON, используя JSON.stringify. (Зависит от кода сервера, он может быть не нужен.) Поэтому параметр filters будет отправлен как

{"a":"1 from a","b":"2 from b","c":"3 from c","d":"4","e":"5"}

Вы можете использовать Fiddler или Firebug для проверки HTTP-трафика соответствующего небольшого демо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...