Передача значений в formmail.cgi без обновления (обработка HTML-формы PHP) - PullRequest
0 голосов
/ 02 августа 2010

У моего хоста есть скрипт 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 ]

1 голос
/ 02 августа 2010

То, как вы определили вашу 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;
});

Должен помочь.

1 голос
/ 02 августа 2010

Чтобы он не обновлял страницу, вам нужно добавить $('#contact_form').submit(function(){ return false; });

Одна вещь, которую я заметил, это то, что вы не указали префикс & для атрибута name при создании собственной строки в кодировке URLЭто хорошо, вы можете использовать jquery, чтобы сделать это автоматически.

Установить идентификаторы для каждого ввода формы, а затем получить значения, используя:

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

идля раздела данных:

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

...