0

私のホストには、htmlフォームデータを電子メールに送信するためのformmail.cgiスクリプト(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;
  });
 }); 

何か案は?

4

2 に答える 2

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 スクリプトをロードし、実際にはデータを 2 回送信します (運よく ajax 呼び出しが成功した場合)。

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

トリックを行う必要があります。

于 2010-08-01T23:52:46.800 に答える
1

ページを更新しないようにするには、追加する必要があります $('#contact_form').submit(function(){ return false; });

私が気づいたことの 1 つは、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 })

于 2010-08-01T23:44:21.187 に答える