我想做的事情非常简单:但事情显然已经出现了问题。
在前端:
function eval() {
var x = 'Unchanged X'
$.get("/", { entry: document.getElementById('entry').value },
function(data){
x = data;
}
);
$("#result").html(x);
}
在后端:
class MainHandler(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
if self.request.get('entry') != '':
#self.response.out.write({'evalresult': self.request.get('entry')})
self.response.out.write(request.get('entry'))
else:
self.response.out.write(template.render(path, {'result': 'Welcome!!'}))
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
wsgiref.handlers.CGIHandler().run(application)
然而,显然函数永远不会被调用,而#result被设置为'Unchanged X'。我错过了什么?
注意:未调用回调。我已通过在回调函数中放置警报(“测试”)来验证这一点。任何人的想法?
答案 0 :(得分:2)
$("#result").html(x);
进入get()
回调
答案 1 :(得分:2)
如果回调未运行,您可以尝试将$ .get更改为$ .ajax()调用,并添加错误回调,以查看服务器是否返回错误。
或者更好的是,检查firebug中的“net”面板,看看服务器的响应是什么,这可能有助于您追踪后端的问题。
一旦问题得到解决,您可能希望用简单的$()。load替换$ .get,它将获取数据并自动将其放入div中:
$('#result').load('/', { entry: document.getElementById('entry').value });
编辑:我认为以下将是一种更简洁的编写方式:
$('#result').load('/', { entry: $('#entry').val() });
答案 2 :(得分:1)
首先我们有一个愚蠢的错误:
<font size="3" face="Trebuchet MS">Speak Your Mind: </font><input type="text"
size="60" id="entry"/> <img valign="bottom" src='/assets/cognifyup.png'
onMouseOver="over()" onMouseOut="out()" onMouseDown="out(); evaluate();"
onMouseUp="over()"><br><br>
over()
和out()
之后需要分号(罗杰那个? ---抱歉无法抗拒)
其次(更微妙的问题):
如果我们需要打算将get()
转换为getJSON()
调用,(您可能已经注意到这是我从返回字典的注释python代码中的原始意图),那么我们需要在str()
周围打self.request.get('entry')
次来电。因此,
self.response.out.write({'evalresult': self.request.get('entry')})
成为:
self.response.out.write({'evalresult': str(self.request.get('entry'))})
由于HTML字段中的字符串转换为Python中的unicode文本,在后端,我们显然需要将其转换为Python字符串(因为getJSON()
显然不喜欢Python表示的unicode字符串 - 任何想法,为什么这是任何人的情况?)。
无论如何,原来的问题已经解决了。总结:任何带有Python unicode字符串的JSON对象将不被接受为有效的JSON对象,并且将无声地失败 - 这是一个令人讨厌的问题,我可以看到任何人在服务器上使用带有Python的JQuery咬人 - 侧。