Как заставить jqGrid работать с Appengine's ProtoRPC - PullRequest
1 голос
/ 02 мая 2011

Может ли кто-нибудь помочь с тем, что, как я полагаю, является простой проблемой?Я пытаюсь заставить Google App Engine обслуживать данные JSON, которые я могу использовать с jqGrid (v4.0.0), но у меня, похоже, есть последний забор, через который можно перепрыгнуть.Мое приложение представляет собой простой пример списка дел, и, используя интерфейс запросов формы ProtoRPC, я получаю вывод, подобный:

{
rows: [
  {
    status: Planning,
    folder: HPM,
    context: WORK,
    title: PURSUE HPM ACTIONS,
    },
  {
    status: Planning,
    folder: PLANNED MAINTENANCE,
    context: WORK,
    title: PM ASBESTOS,
    },

Я пытаюсь подобрать это со следующими настройками jqGrid:

      jQuery("#tasklist").jqGrid({
        url:'http://localhost:8084/postservice.get_tasks',
        datatype: 'json',
        mtype: 'GET',
        colNames:['Task','Folder', 'Context','Status'],
        colModel :[ 
          {name:'title', index:'Task', width:120}, 
          {name:'folder', index:'Folder', width:40}, 
          {name:'context', index:'Context', width:32}, 
          {name:'status', index:'Status', width:32} ], 
        pager: jQuery('#pager'),
        rowNum:10,
        jsonReader: {repeatitems:false, cell:'' },
        rowList:[10,20,30],
        sortname: 'folder',
        sortorder: "desc",
        viewrecords: true,
        imgpath: 'themes/basic/images',
        caption: 'My Jobs'
      }); 

Однако, когда я запускаю этот код, я получаю один из двух ответов: если я оставляю mtype как GET, тогда jqGrid пытается передать параметры URL, которые отклоняются ProtoRPC:

http://localhost:8084/postservice.get_tasks?_search=false&nd=1304325960695&rows=10&page=1&sidx=folder&sord=desc
400 unrecognized RPC format

Если я изменяю mtype наПосле этого у меня есть ответ 200 OK, но в моей сетке нет данных, и с помощью Firebug я не вижу никаких доказательств того, что какие-либо данные были возвращены.

У меня есть несколько вещей, которые я пробовал, ноЯ достиг предела своих навыков здесь (не сложно!), И я был бы признателен за любую помощь.

  • мне нужно, чтобы ProtoRPC возвращал другую информацию, которую JsonReader ожидает по умолчанию, т.е., страница, записи и т. д.
  • Я пытался следовать ответ Олега , но когда я поместил предложенный код прямо перед настройками jqGrid, у меня были синтаксические ошибки, и запрос никогда не выполнялся:

$. Extend ($. Jgrid.defaults, тип данных: 'json', {ajaxGridOptions: {contentType: "application / json"}, {ajaxRowOptions: {contentType: "application / json", тип: "PUT"}});

  • Я просто попытался добавить contentType: "application / json" к параметрам jqGrid (невежество - счастье), но это не имело никакого значения
  • Возможно, я получаюинформация возвращается, но я просто не вижу ее в Firebug?

Любая помощь будет высоко ценится.


PS: Используя curl, я могу вернутьсяожидаемые данные, пока я не пытаюсь опубликовать какие-либо данные:

C: \ Users \ Staples1> curl -i -X ​​POST -HContent-Type: application / json -HAccept:application / json http://localhost:8084/postservice.get_tasks
HTTP / 1.0 200 OK Сервер:
Разработка / 1.0 Дата: понедельник, 02 мая 2011
16:55:19 GMT Cache-Control: без кеша
Content-Тип: application / json
Срок действия истекает: пятница, 01 января 1990 г., 00:00:00 по Гринвичу
Длина содержимого: 1069
{"строки": [{"status": "Planning", "folder": "HPM", "context": "WORK "," title ":" P URSUE HPM ACTIONS "}, {" status ":" Planning "," folder ":" PLANNED MAINTENANCE "," conttext ":" WORK "," title ":" PM ASBESTOS "}, {"status": "Next Action", "folder": "PL ANNED MAINTENANCE", "context": "WORK", "title": "Chase Brian на асбесте"}, {"st atus": "Undefined"," folder ":" PLANNED MAINTENANCE "," context ":" WORK "," title ":" PM GAS "}, {" status ":" Hold "," folder ":" PLANNED MAINTENANCE "," context ": "WORK", "title": "Do PBS detail for Gas"}, {"status": "Hold", "folder": "PLANNED MAIN TENANCE", "context": "WORK", "title": "Выполните следующее описание продукта для Gas Servi cing "}, {" status ":" Hold "," folder ":" DPA "," context ":" WORK "," title ":" Разместите уведомления о конфиденциальности на Rosie "}, {"status": "Hold", "folder": "DPA", "context": "WORK", "title": "Info Profiling Info"}, {"status": "Hold", "folder":"DPA", "context": "WORK", "title": "Написать соглашение о доступе к сети для подрядчиков / третьих сторон"}, {"status": "Hold", "folder": "DPA", "context": "РАБОТА", "заголовок": "C CMB на связидля соглашения "}]}
C: \ Users \ Staples1>

И да, я купил ноутбук у Staples!


PPS: проблема в том, чтоИдем дальше.

Наконец, я снова прочитал ответ Олега и добавил к параметрам jqGrid:

ajaxGridOptions: {contentType: 'application / json;charset = utf-8 '},

Теперь из Firebug видно, что я в конечном итоге отправляю ContentType: application / json в ProtoRPC, и я получаю тот же ответ об ошибке, что и приЯ пытаюсь отправить любые данные, используя curl, а именно трассировку от AppEngine, которая заканчивается

Файл "C: \ Program Files (x86) \ Google \ google_appengine \ lib \ simplejson \ simplejson \ decoder.py", строка 315, в декодировании
obj, end = self.raw_decode (s, idx = _w(s, 0) .end ()) Файл "C: \ Program Files (x86) \ Google \ google_appengine \ lib \ simplejson \ simplejson \ decoder.py", строка 333, в raw_decode
повышение ValueError ("Нет JSONобъект может быть декодирован ") ValueError: Ни один объект JSON не может быть декодированdesc

, который не выглядит особенно jsonic.Похоже, единственным препятствием является то, как заставить jqGrid не отправлять данные или некоторые правильно отформатированные данные JSON, или заставить ProtoRPC игнорировать данные?

Предложения приветствуются!

1 Ответ

0 голосов
/ 03 мая 2011

Ну, это не красиво и не выиграет никаких призов, но я обнаружил, что вы можете отключить параметры, которые jqGrid пытается отправить в ProtoRPC, установив значения по умолчанию в null в параметрах сетки:

prmNames: {nd:null, search:null, rows:null, page:null, sort:null, order:null},

А теперь он заполняет сетку. Наконец я дошел до стартовой линии.

Просто подведем итог, остальные кусочки головоломки:

datatype: 'json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
mtype: 'POST',

Обезьяны и пишущие машинки. , .

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