JQuery “get”失败(使用Google App Engine作为后端)

1 投票
3 回答
837 浏览
提问于 2025-04-15 13:35

我想做的事情其实很简单,但显然出了点问题。

在前端:

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'。我漏掉了什么呢?

注意:回调函数没有被调用。我通过在回调函数里放一个alert("Test")来确认这一点。有没有人有什么想法?

3 个回答

2

如果你的回调函数没有运行,可以试着把$.get换成$.ajax(),并添加一个错误回调,这样可以看看服务器是否返回了错误。

更好的办法是,在firebug的“网络”面板中查看服务器的响应,这样可能帮助你找到后端的问题所在。

另外,一旦问题解决了,你可能想把$.get换成简单的$().load,这样可以自动把数据放到div里:

$('#result').load('/', { entry: document.getElementById('entry').value });

编辑:我想下面的写法会更符合jQuery的风格:

$('#result').load('/', { entry: $('#entry').val() });
2

这段代码 $("#result").html(x); 是放在 get() 函数的回调里面的。

1

首先,我们有一个简单的错误:

<font size="3" face="Trebuchet MS">Speak Your Mind:&nbsp;&nbsp;</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 代码中想要实现的,返回一个字典),那么我们需要在 self.request.get('entry') 周围加上 str()。所以,

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 的人会遇到这个麻烦。

撰写回答