如何让jqGrid与Appengine的ProtoRPC配合使用

时间:2011-05-02 09:12:40

标签: json jqgrid

任何人都可以帮助我认为是一个简单的问题吗?我正在尝试让Google App Engine提供我可以与jqGrid(v4.0.0)一起使用的JSON数据,但我似乎有一个最后的围栏可以跳过。我的应用程序是一个简单的待办事项列表示例,并使用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会尝试传递被ProtoRPC拒绝的url参数:

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

如果我将mtype更改为POST,那么我有200 OK响应,但我的网格中没有数据,并且使用Firebug我看不到有任何数据被返回的证据。

我有一些我尝试过的东西,但我已经达到了我的技能极限(并不难!)我会感激任何帮助。

  • 我是否需要让ProtoRPC返回JsonReader默认的其他信息,即总数,页数,记录等?
  • 我尝试关注Oleg's answer,但当我将建议的代码放在jqGrid设置前面时,我遇到了语法错误,请求从未运行过:

$。延伸($。jgrid.defaults,          数据类型:'json',          {ajaxGridOptions:{contentType:“application / json”},          {ajaxRowOptions:{contentType:“application / json”,type:“PUT”} });

  • 我刚刚尝试将内容类型:“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日期:2011年5月2日星期一
  16:55:19 GMT Cache-Control:no-cache
  内容类型:application / json
  到期日:1990年1月1日星期五00:00:00 GMT
  内容长度:1069
  {“rows”:[{“status”:“Planning”,   “文件夹”:“HPM”,“上下文”:“工作”,   “title”:“P URSUE HPM ACTIONS”},   {“status”:“规划”,“文件夹”:   “计划维护”,“合作”:   “WORK”,“title”:“PM ASBESTOS”},   {“status”:“下一步行动”,“文件夹”:   “PL ANNED MAINTENANCE”,“context”:   “工作”,“标题”:“追逐布赖恩   asbestos“},{”st atus“:”Undefined“,   “文件夹”:“计划维护”,   “背景”:“工作”,“标题”:“PM   GAS“},{”status“:”暂停“,”文件夹“:   “计划维护”,“背景”:   “工作”,“标题”:“做PBS细节   Gas“},{”status“:”Hold“,”folder“:   “计划主要情况”,“背景”:   “工作”,“标题”:“做下一个产品   气体服务说明“},   {“status”:“Hold”,“folder”:“DPA”,   “背景”:“工作”,“标题”:“放山姆   罗西“}上的隐私声明,   {“status”:“Hold”,“folder”:“DPA”,   “上下文”:“工作”,“标题”:“客户   分析信息“},{”状态“:”保持“,   “文件夹”:“DPA”,“上下文”:“工作”,   “title”:“写入网络访问权限   承包商协议/ thi rd   派对“},{”状态“:”暂停“,   “文件夹”:“DPA”,“上下文”:“工作”,   “标题”:“C接触CMBC   协议“}]}
  C:\ Users \用户Staples1>

是的,我确实从史泰博购买了笔记本电脑!


PPS:问题正在继续。

我终于再次阅读Oleg的回复并添加到jqGrid选项中:

  

ajaxGridOptions:{contentType:   “应用程序/ JSON; charset = utf-8'},

现在我可以从Firebug看到我最终将ContentType:application / json发送到ProtoRPC,并且当我尝试使用curl发送任何数据时,我得到了相同的错误响应,即来自AppEngine的回溯完成了

  

文件“C:\ Program Files   (86)\谷歌\ google_appengine \ LIB \ simplejson \ simplejson \ decoder.py”   线315,在解码中       obj,end = self.raw_decode(s,idx = _w(s,0).end())文件“C:\ Program   档   (86)\谷歌\ google_appengine \ LIB \ simplejson \ simplejson \ decoder.py”   第333行,在raw_decode中       提出ValueError(“无JSON对象可以解码”)ValueError:No JSON   对象可以被解码

从Firebug发布的数据是

  

_search =假安培; ND = 1304360758388&安培;行10安培=;页= 1&安培; SIDX =夹&安培; SORD =降序

这似乎并不特别jsonic。看起来唯一的障碍是如何让jqGrid不发送数据,或者一些格式正确的JSON数据,或者让ProtoRPC忽略数据?

建议欢迎!

1 个答案:

答案 0 :(得分:0)

嗯它不漂亮,它不会赢得任何奖品,但我发现你可以通过在网格选项中将默认值设置为null来关闭jqGrid尝试发送到ProtoRPC的参数: / p>

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

现在它正在填补网格。最后我到了起跑线。

回顾一下,这个难题的其他部分是

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

猴子和打字机。 。