javascript - 使用javascript调用python函数并在网页上显示返回的字符串

标签 javascript python ajax google-app-engine

我有一个简单的 appengine/python 应用程序,允许用户单击按钮来显示随机生成的句子。到目前为止,我已经将主要的 python 文件拼凑如下:

import jinja2
import os
import webapp2
import generator  # My random sentence generator module; its make_sentence() function returns a string

class MainPage(webapp2.RequestHandler):

      def get(self):
          template = jinja_environment.get_template('main.html')
          self.response.out.write(template.render(dict(sentence = generator.make_sentence())))

  jinja_environment = jinja2.Environment(
      loader=jinja2.FileSystemLoader(os.path.dirname(__file__))
  )

  application = webapp2.WSGIApplication([
      ('/', MainPage),
  ], debug=True)

在main.html中:

   <!DOCTYPE html>
   <html>
     <head>
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
       <link rel="stylesheet" href="css/custom.css">
       <title>Random Sentence Generator</title>
     </head>
     <body>
      <div class="jumbotron">
        <p class="lead">{{ sentence }}</p>
        <a class="btn-lg btn-info" onclick="makeSentence();return false;" href="#">Generate sentence!</a>
      </div>

      <script>    
        function makeSentence(){  
          location.reload(); 
        }
      </script>
      <script src="http://code.jquery.com/jquery.js"></script>
      <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
    </body>
  <html>

如果这个问题很重要,这里还有 app.yaml:

   application: sentence-generator
   version: 1
   runtime: python27
   api_version: 1
   threadsafe: true

   handlers:
   - url: /css
     static_dir: css

  - url: /.*
    script: sengen.application

  libraries:
  - name: jinja2
    version: latest

这工作正常(事实上,人们可以尝试一下 here :-) ),但我希望能够生成一个新句子,而无需每次刷新页面。

来自this question ,看起来我可以使用 Ajax 来实现这一点。但我不确定如何将它们组合在一起。我想我可以将 makeSentence() 的内容替换为上一个链接中的最佳答案之类的内容,但我不确定如何将“响应”与我在网页。

最佳答案

您走在正确的道路上。您可以使用 ajax 获取输出并将其放入段落中,而不是调用 location.reload()。首先,在放置句子的段落中添加一个标识符:

 <p id="sen1" class="lead">{{ sentence }}</p>

现在剩下的就是使用 AJAX 获取当前页面输出并将其显示在 sen1 中。你可以在 makeSentence 中做类似的事情。 (这将提醒您在ajax中重新加载主页的响应。您可能想从中提取所需的信息。)

    function makeSentence() {
     $.ajax({
          url:'http://sentence-generator.appspot.com'
       }
     )
     .done(function(data) {
         alert(data);
         })
    .fail(function(){
        alert('error');
        })
    .always(function(){
        //alert('always');
        })
        ;
    }

关于javascript - 使用javascript调用python函数并在网页上显示返回的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20590671/

相关文章:

python - 从字典子集有效填充 SciPy 稀疏矩阵

javascript - 如何始终刷新由ajax加载的文件,避免缓存文件

javascript - Web 音频/ radio 流客户端 : use Howler. js、 native 音频、其他库?

javascript - 如何混合 PHP 和 Javascript 变量(如果有的话)?

python - 比较 numpy 数组中的相邻值

python - 在Python中从文本文件读取数据并将其写入numpy列

php - 如何使用 jQuery Load 并传递参数将 php 文件加载到 div 中

c# - 使用 ajax 将模型发送到 Controller ,asp.net mvc

javascript - JS ES6 : Import { functionName } is undefined

javascript - 使用动态名称访问对象中的元素