Отправка электронной почты с использованием jquery не работает: PHP - PullRequest
2 голосов
/ 10 января 2011

Насколько я могу судить, этот скрипт отлично работает в Chrome и IE. Это не работает прямо в Firefox. (Не обещание, что все работает отлично - иногда электронное письмо не проходит, но мы не можем воссоздать эту ошибку.)

РЕДАКТИРОВАТЬ: Теперь кажется, что в Chrome и Firefox электронная почта не отправляется при первой попытке , но если я нажму кнопку возврата из PayPal и снова отправлю, отправлено.

Я думал, что проблема в том, что AdBlock Plus как-то отключает скрипты. На странице отключено ABP, и оно отправлено ... но после обновления страницы и повторной попытки отправки оно снова не работает.

Предполагается, что в этой регистрационной форме отправляется электронное письмо, содержащее набор данных формы, изменяются соответствующие входные данные для подготовки к отправке в PayPal с тем, на что пользователь зарегистрировался, а затем перенаправляют пользователя в PayPal для отдельной обработки платежа. Перенаправление на PayPal всегда происходит идеально, с соответствующими элементами в корзине.

Этот код находится в заголовке HTML-файла. (Раньше я использовал собственный минимизированный файл jQuery, поэтому при поиске ошибок я пытался связать его с этим - проблема не решалась.)

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script type="text/javascript" src="[myscripts].js"></script>

Форма начинается:

<form id="[myformname]" name="[myformname]" method="post" action="">

[myscripts] .js содержит это:

$(function() {  
  $('.error').hide();  
  $(".button").click(function() {

    // many lines pulling input from form, generally of the type:
    var firstname = $("input#firstname").val();
    // as well as 
    var subscribe = $("input#subscribe").is(':checked');

    // simple validation code for now, here is a generalized version
    if (firstname == ''){
       $('p#errors').html("Error: First name is required.");
       $("p#errors").show();
       return false;
    }
    else if (lastname == ''){
       $('p#errors').html("Error: Last name is required.");
       $("p#errors").show();
       return false;    
    }
    else {
       $("p#errors").hide();
    }


    fixFields();   // this does the adjustment for PayPal
                   // checked checkboxes -> item_name_1, amount_1, etc.

    // in the real code, submitString is very long
    var submitString = 'firstname='+firstname+'&lastname='+lastname+'&email='+email+'&subscribe='+subscribe; // etc.

    $.ajax({  
      type: "POST",  
      url: "register.php",  
      data: submitString,  
      success: function() {
        return false;
      }  
    });

    submitForm(); // resets action to PayPal link, resubmits

  });  
});  

Если это уместно, вот метод submitForm, определенный ранее в [myscripts] .js:

function submitForm(){
  var form_url = $("#[myformname]").attr("action"); 
  //changing the action
  $("#[myformname]").attr("action","https://www.paypal.com/cgi-bin/webscr");
  //submit the form
  $("#[myformname]").submit();
  return true;
}

Вот регистр.php:

<?php
 $to = "[example1]@gmail.com,[example2]@gmail.com";
 $subject = "New Registration";
 $headers = "From: webmaster@[mysite.com]";

 // shortened for readability's sake
 $name = $_POST['firstname']." ".$_POST['lastname'];

 $body = "INFORMATION\n".$name."\n".$_POST['email'].", Subscribe: ".$_POST['subscribe'];

 $body = $body."\nSELECTIONS\n";
 if ( $_POST['option1']=="true" ) {
    $body = $body."Option 1 Name\n     Details Line 1\n     Details Line 2\n";
 }
 if ( $_POST['option2']=="true" ) {
    $body = $body."Option 2 Name\n     Details Line 1\n     Details Line 2\n";
 }

 mail($to, $subject, $body, $headers);

?>

Извините, если это смехотворно длинный пост. Я энтузиаст программирования и очень плохо знаком со многими языками, которые я здесь использую, поэтому я хотел быть максимально понятным. Заранее спасибо за любые предложения.

Ответы [ 3 ]

3 голосов
/ 10 января 2011

Вероятно, вы не даете ему достаточно шансов отправить форму через AJAX, прежде чем отправить ее в PayPal, попробуйте переместить функцию submitForm() в функцию success AJAX.

0 голосов
/ 30 марта 2014

Это ошибка JavaScript.Не ошибка PHP.Установите Firebug на Firefox, включите консоль, сохраните все ошибки и попробуйте запустить скрипт.Вы увидите проблемы.

Кроме того, условия JavaScript немного отличаются от PHP.if (blah == '') - плохое кодирование.

если вы хотите указать длину, она должна быть: if (blah.length> = 1).Я посмотрю на ваш javascript и посмотрю, если что-то выделяется ..

Но ответ - отладка в вашей консоли Firefox.

Хорошо, вот ваша проблема ...форма, попытка двигаться дальше до того, как вы получите ответ в своем jjery ajax-методе. Вам нужно нажать на кнопку, она вызывает вызов ajax, а затем ничего не делает до завершения.Я напишу сценарий для вас и скоро опубликую.

Решение:

$.ajax({  
      type: "POST",  
      url: "register.php",  
      data: submitString,  
      success: function() {
        submitForm();
      }, error: function() {
         //something went wrong, use console.log here if you know what that is.
      }  
 });

    //submitForm(); // this was firing before ajax was done.
0 голосов
/ 10 января 2011

попробуйте проверить на if(isset($_POST["whatever"]) AND $_POST["whatever"]).Отправка строки "true" является соглашением браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...