邮政方法不起作用

时间:2013-04-02 08:10:58

标签: javascript python html ajax google-app-engine

我想使用post使用ajax提交表单数据,因为在提交后的表单帖子中,它会被重定向到新页面。

<form id="myContactForm">
    <p>
        <label for="byour_name">Your name</label><input type="text" name="byour_name" value="" id="byour_name">
    </p>
    <p>
        <label for="byour_email_address">Your email address</label><input type="text" name="byour_email_address" value="" id="byour_email_address">
    </p>
    <p>
        What's on your mind?<br>
        <textarea name="Message" rows="10" cols="25"></textarea>
    </p>
    <p>
        <input type="submit" value="Send it!" onClick="sendMail()">
    </p>
</form>

function sendMail() {
    $.ajax( {
        url: "/email",
       type: "POST",
       data: $("#myContactForm").serialize(),
    success: function( response) {
                alert(response);
             },
      error: function() {
                alert('failure');
    }
    });
}

每次我发出请求错误功能正在执行。我正在谷歌应用引擎上编写应用程序。我一直收到这个错误:

self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

我的帖子请求处理程序是:

def post(self):

    Content = self.request.get("Message")
    byName = self.request.get("byour_name")
    byEmailAddress = self.request.get("byour_email_address")

    gmailUser = 'id@gmail.com'
    gmailPassword = 'password'
    dataSend = byName

    mail.send_mail(sender  = gmailUser,
                   to      = gmailUser,
                   subject ="Email Sent By : "+ byName + "@" + byEmailAddress,
                   body    = Content)
    self.response.out.write(byEmailAddress)

点击提交按钮后,URl变为:

http://localhost:8080/?byour_name=username&byour_email_address=userEmail@gmail.com%40gmail.com&Message=mlm%0D%0A#contact

因为我正在制作获取请求,所以有人可以帮助我。但是发布请求如何更改以获取请求。

4 个答案:

答案 0 :(得分:1)

您没有阻止默认提交。要么从sendMail函数返回false,要么将事件作为参数并在其上调用preventDefault()

答案 1 :(得分:0)

我想我知道你要做什么,为了解决这个问题,你可以做到以下几点:

删除onclick =“sendMail()”

并将您的JavaScript函数更改为:

$('#myContactForm').submit(function () {
  $.ajax( {
    url: "/email",
    type: "POST",
    data: $("#myContactForm").serialize(),success: 
      function( response) {   
        alert(response);         
      },                  
      error: function(){                                              
        alert('failure');                                    
      }
    });
});

答案 2 :(得分:0)

请删除表单标记并按ID获取所需的值,然后使用ajax方法。因为可能是ajax帖子和表单请求方法是冲突的。我认为表格有默认的get方法,正如你之前所说的那样,这就是你在表单get方法之后很快点击提交第一个ajax post make请求的原因,这可能就是你的服务器抛出错误的原因。

答案 3 :(得分:0)

<form id="myContactForm" method="post">

在表单标签上使用帖子。我认为它会对你有所帮助。