【发布时间】:2014-05-18 06:28:38
【问题描述】:
我正在尝试从我的数据存储中检索Staff 实体列表,然后在我的 jQuery 移动应用程序中将其显示为列表。
当我从浏览器本地测试时,它会像这样显示数据:
[{"ID": "67", "Name": "Stevie Gerrad"},{"ID": "100", "Name": "Christiano Ronaldo"}]
但是当我从我的 jQuery 移动应用程序中尝试它时,什么也没有发生。虽然没有任何错误并且我得到了状态码:
Status Code: HTTP/1.1 200 OK.
在我的Python 代码中,我有:
class Staff(ndb.Model):
staff_id=ndb.IntegerProperty(required=True)
staff_name=ndb.StringProperty(required=True)
def asJSONString(self):
return '{"ID": "%s", "Name": "%s"}' % (self.staff_id, self.staff_name)
def toTableRow(self):
return "<tr><td>" + self.staff_id + "</td><td>" + self.staff_name + "</td></tr>"
class StaffHandler(webapp2.RequestHandler):
def get(self):
staff_id=self.request.get('id')
callback=self.request.get('callback')
staff=Staff.get_by_id(staff_id)
if staff:
self.response.write("A member with this id already exists")
else:
s_id = int(self.request.get('id'))
s_name= self.request.get('name')
staff=Staff(id=s_id, staff_id=s_id, staff_name=s_name)
staff.put()
if callback:
self.response.write(callback + '(' + staff.toJSON() + ')')
else:
self.response.write(staff.toJSON())
def getStaffList(callback):
members_of_staff = Staff.query()
strList=""
for staff in members_of_staff:
if len(strList) > 0:
strList+= ',' + staff.asJSONString()
else:
strList=staff.asJSONString()
if callback=='':
return '[' + strList + ']'
else:
return callback+ '([' + strList + ']);'
class StaffViewHandler(webapp2.RequestHandler):
def get(self):
callback=self.request.get('callback')
self.response.headers["Content-Type"] = "application/json"
self.response.out.write(getStaffList(callback))
app=webapp2.WSGIApplication([
('/staff',StaffHandler),
('/viewStaffList', StaffViewHandler)
], debug=True)
然后在我的staff.js 文件中,我做了这样的事情:
viewMembersURL = "http://localhost:8030/viewStaffList";
$ (document).ready(function() {
$("#showMembers").bind('click', function(event) {
event.preventDefault();
doViewMembersRequest();
});
});
function doViewMembersRequest() {
$.ajax({
type: "GET",
url: viewMembersURL,
async: true,
jsonpCallback: 'handleResults',
contentType: "application/json",
dataType: 'jsonp'
});
}
function formatStaffList(members) {
var html = "<li><div>";
html+="<p><strong>" + members.id + "</strong></p>" +
"<h5>" + member.name + "</h5>";
html+="</div></li>";
return html;
}
function handleResults(members) {
var i, list="";
for (i=0; i<members.length; i +=1) {
list+=formatStaffList(members[i]);
}
displayMembers(list);
}
function displayMembers(list) {
$("#staff_members").html(list).listView();
}
最后,我的staff.html 代码部分我想在单击按钮时显示列表:
<div data-role="content">
<ul data-role="listview" data-theme="b" data-inset="true">
<a href="#" id="showMembers" data-role="button" data-theme="b">Show Members</a>
</ul>
<ul id="staff_members" data-role="listview" data-inset="true">
<!--Members list to go in here-->
</ul>
</div>
我非常感谢您对此的重新考虑。
更新:
我进行了几次测试,看看我是否可以只显示名称。不知何故,我设法让listview 显示这个:
显示的项目数与我的数据存储中的实体数相匹配。这意味着与服务器的通信很好。我认为问题出在这条线上
html+="<h5>" + members.name + "</h5>";
member.name 没有返回任何内容(使用 console.log() 测试)。
如果我把它改成只是
html+="<h5>" + members + "</h5>";
我得到:[object Object] 显示在列表视图中。这告诉我正在从数据存储返回对象,而不是我预期的字符串。
【问题讨论】:
标签: javascript python json google-app-engine jquery-mobile