【问题标题】:Handling json Form with jQuery on Google App Engine在 Google App Engine 上使用 jQuery 处理 json 表单
【发布时间】:2012-08-19 05:39:33
【问题描述】:

我在让 jQuery 在 GAE python 2.7 上工作时遇到了一些问题。 主要问题是jQuery无法捕捉到服务器返回的json数据。

一个没有什么特别的简单评论表单:

<form action="/postcomment/" method="post" id="commentform">
  <input type="text" name="author" id="author"  onfocus="if(this.value=='Name: (required)') this.value='';" onblur="if(this.value=='') this.value='Name: (required)';" {% if name %}value="{{ name }}"{% else %}value="Name: (required)"{% endif %} size="22" tabindex="1" aria-required='true' />
  <input type="text" name="email" id="email"  onfocus="if(this.value=='E-Mail: (required)') this.value='';" onblur="if(this.value=='') this.value='E-Mail: (required)';" {% if email %}value="{{ email }}"{% else %}value="E-Mail: (required)"{% endif %} size="22" tabindex="2" aria-required='true' />
<textarea name="comment" id="comment" cols="100%" rows="10" tabindex="3"></textarea>
<input name="submit" type="submit" id="submit" tabindex="4" value="Submit" />
</form>

我的 jQuery 代码(只是为了使其更简单的结构):

$("#submit").click(function() {
$.ajax({
 dataType: 'json',
 beforeSubmit: function() {
 },
 timeout: 60000,
 error: function(request,error) {
 },
  success: function(data) {
   var obj = jQuery.parseJSON(data);
   //blah blah...
   } // End success
}); // End ajax method
});

在服务器端:

class PostComment(BaseHandler):
  def post(self):
    self.response.headers['Content-Type'] = "application/json"
    response = {'errorcode': 0}
    self.response.out.write(json.dumps(response))

结果是: 点击“提交”按钮后,我的 Firefox 3.6 浏览器提示:有“application/json”文件,你想用什么工具打开它?

我希望 jQuery 能够捕获这个“json”数据并对其进行处理。但它没有发生。

我相信我快到了,但出了点问题。

【问题讨论】:

    标签: javascript jquery python json google-app-engine


    【解决方案1】:

    您需要取消表单的默认操作,即提交(取消任何正在运行的 JavaScript AJAX 查询):

    $("#submit").click(function() {
        $.ajax({
         dataType: 'json',
         beforeSubmit: function() {
         },
         timeout: 60000,
         error: function(request,error) {
         },
          success: function(data) {
           var obj = jQuery.parseJSON(data);
           //blah blah...
           } // End success
        }); // End ajax method
        return false; // Cancel default action.
    });
    

    通过从点击处理程序返回falsenormal 表单操作,即浏览器将数据提交到action 属性中指定的 URL 的操作不会被执行。

    【讨论】:

    • 非常感谢!有用!但是,如果我在表单中添加recaptcha 脚本:&lt;script type="text/javascript" src="https://www.google.com/recaptcha/api/challenge?k=xxxx" &gt; &lt;/script&gt; 再次出现相同的json 文件问题。我该如何解决这个问题?
    • @GabySolis:抱歉,我不知道为什么会这样,我不熟悉 ReCaptcha JS。也许您可以提出一个新问题,以便知道的人可以帮助您?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多