【问题标题】:JQuery "get" failure (using Google App Engine on the back-end)JQuery“获取”失败(在后端使用 Google App Engine)
【发布时间】:2009-08-14 02:12:46
【问题描述】:

我想要做的很简单:但显然有些事情出了差错。

在前端:

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”。我错过了什么?

注意:回调未被调用。我已经通过在回调函数中放置一个警报(“测试”)来验证这一点。有什么想法吗?

【问题讨论】:

  • eval 是一个有效的函数名,因为已经有内置函数调用它吗?
  • eval 被调用...但只是为了好玩,我更改了函数名称:没有区别。还是不行。
  • 您是否使用过 Fiddler 或 Firebug 来查看呼叫发生了什么。它会消失吗?它会以 200 以外的形式返回吗?
  • 我放弃了萤火虫:它不是很有用。 Safari 4 内置了类似的功能,实际上它似乎向我显示了一些错误(这让我感到困惑):这个标签有问题:    说出你的想法:  

    并给我错误:错误:NOT_SUPPORTED_ERR:DOM 异常 9 我很难过
  • 实际上,我现在正在使用 firebug ... 遇到了一些奇怪的问题。现在解决了。我能够让 $.get() 工作。现在,追踪一个 $.getJSON() 问题。尽管对此没有明确的“答案”,但我很欣赏这些提示。感谢大家的帮助!

标签: javascript jquery python google-app-engine


【解决方案1】:

$("#result").html(x); 进入get() 回调

【讨论】:

  • 我不明白为什么这很重要。但我试过了:还是不行。
  • 注意:我在回调中添加了一个 alert(),所以我确定回调甚至没有被调用。
  • 这很重要,因为 $.get 是异步运行的,这意味着元素的 html 可能会在回调运行之前被替换
  • 在我的特定上下文中,现在应该没问题。但是,是的,好点,一旦我让它工作,我肯定会清理它。我的下一步是探索萤火虫。
【解决方案2】:

如果回调未运行,您可以尝试将 $.get 更改为 $.ajax() 调用,并添加错误回调,以查看服务器是否返回错误。

或者更好的是,在 firebug 的“net”面板中查看服务器响应是什么,这可能有助于您追踪后端的问题。

此外,一旦问题得到解决,您可能希望将 $.get 替换为简单的 $().load,它会自动获取数据并将其放入 div:

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

编辑:我想下面会是一种更 jQueryish 的写法:

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

【讨论】:

    【解决方案3】:

    首先我们犯了一个愚蠢的错误:

    <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 代码中的原始意图),那么我们需要包装一个@987654326 @致电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 对象都将 not 被接受为有效的 JSON 对象,并且会静默失败——我可以看到在服务器上使用 JQuery 和 Python 的任何人都会遇到一个讨厌的问题——一边。

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 2014-08-05
      • 2019-01-03
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多