任何人都可以帮助我认为是一个简单的问题吗?我正在尝试让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我看不到有任何数据被返回的证据。
我有一些我尝试过的东西,但我已经达到了我的技能极限(并不难!)我会感激任何帮助。
$。延伸($。jgrid.defaults, 数据类型:'json', {ajaxGridOptions:{contentType:“application / json”}, {ajaxRowOptions:{contentType:“application / json”,type:“PUT”} });
非常感谢任何帮助。
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忽略数据?
建议欢迎!
答案 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',
猴子和打字机。 。