将值传递给formmail.cgi而不刷新(HTML表单PHP处理)

时间:2010-08-01 21:37:59

标签: php javascript jquery formmail

我的主机有一个formmail.cgi脚本,用于将html表单数据发送到电子邮件(http://formmail.dreamhost.com/),但我不明白如何传递它理解的值。

我尝试使用此方法传递表单值:

HTML:

<form  id="contact_form" action="http://formmail.dreamhost.com/cgi-bin/formmail.cgi" method="POST"> 

 <input type=hidden name="recipient" value="info#raphaelguilleminot.com">
 <input type="hidden" name="subject" value="Message from Raphael's portfolio site" />
 <input type=text id="email" class="email default-value" name="email" value="Your email">
 <label class="error" for="email" id="email_error">your email is required</label> 
 <textarea id="message" class="contact_message default-value" name="message" value="your message">Tell me whats on your mind!</textarea><br/> 
 <input class="submit button" type="submit" value="Send" /> 

</form>

Jquery的:

$(".button").click(function() {  

var dataString = 'recipient=info#raphaelguilleminot.com' + 'name='+ name + '&email=' + email + '&message=' + message; 

$.ajax({  
 type: "POST",  
 url: "http://formmail.dreamhost.com/cgi-bin/formmail.cgi",  
 data: dataString,  
 success: function() {  
  $('#contact_form').hide().fadeIn(1500) 
  }  
  });  
  return false;
  });
 }); 

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

为了不刷新页面,您需要添加 $('#contact_form').submit(function(){ return false; });

我注意到的一件事是你没有加前缀&amp;对于name属性,构建自己的url编码字符串很好,你可以使用jquery自动为你做。

为每个表单输入设置Id,然后使用:

获取值

msg = $('#message').val(); replyto = $('#email').val();

和数据部分:

data:({ recipient:info#raphaelguilleimnot.com, subject:'Message from Raphael's portfolio site', email:replyto, message:msg })

答案 1 :(得分:1)

您定义dataString的方式不正确。

var dataString = 'recipient=info#raphaelguilleminot.com' + 'name=' (...)

实际应该是

var dataString = 'recipient=info#raphaelguilleminot.com' + '&name=' (...)

此外,您应该使用数组或对象来传递数据参数,例如

var data = {
  recipient: 'info#raphaelguilleminot.com',
  name: name,
  (...)
}

jQuery会自动确保您的参数正确转义。

最后,您应该阻止提交按钮的默认行为,以便进行ajax调用。否则,您的页面将加载CGI脚本,实际上两次发送数据(如果ajax调用幸运的话)。

$('#contact_form').submit(function(){ 
  return false;
});

应该做的伎俩。