2011-01-10 3 views
2

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

EDIT: Теперь, кажется, что в 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; 
} 

Вот register.php:

<?php 
$to = "[example1]@gmail.com,[example2]@gmail.com"; 
$subject = "New Registration"; 
$headers = "From: [email protected][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); 

?> 

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

+0

Прежде всего, если он работает в некоторых браузерах, это не может быть проблемой PHP - поэтому ваш вопрос немного вводит в заблуждение, так как электронная почта РНР() не является проблемой здесь. –

+0

Редактирование названия, чтобы отразить, что проблемы больше не ограничиваются Firefox. – Michelle

+0

Если я прокомментирую submitForm(); line, электронное письмо отправляется при первой загрузке, в Chrome и в Firefox. Буг ...? – Michelle

ответ

-1

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

+0

Извините, я чувствую себя noobiest noob в мире, но я не уверен, как это сделать. Должен ли я поставить этот тест на что-то в моем PHP-файле? – Michelle

+0

замените существующий 'if ($ _POST ['option1'] ==" true ") {' test with mine. – DampeS8N

+0

Хорошо. Поместите свои тесты на место, закомментируйте submitForm(), очищенный кэш Chrome, отправленный по электронной почте. Uncommented submitForm(), очищенный кэш Chrome, электронная почта не отправила, но перенаправила на PayPal. Вернитесь в браузере, нажмите кнопку еще раз, адрес электронной почты отправлен и перенаправлен. Вернитесь в браузер, обновите страницу, нажмите кнопку еще раз, адрес электронной почты отправлен и перенаправлен. – Michelle

3

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

+0

Пробовал это в Chrome и Firefox, и форма не работает вообще - просто обновляет и показывает пустую форму. Не отправлено электронное письмо, не перенаправляется на PayPal. – Michelle

+0

+1 это звучит вполне правдоподобно ... Это означало бы, что Firefox _is_ самый быстрый браузер. ;-) –

+0

Также убедитесь, что кнопка, на которую вы нажимаете, не является кнопкой отправки в ней, или вам нужно будет возвратить значение false, чтобы остановить отправку фактической формы. – fire

0

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

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

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

Но ответ должен быть отлажен в вашей консоли firefox.

Хорошо, вот ваша проблема ... Вы отправляете форму, пытающуюся перейти, прежде чем вы получите ответ в вашем методе jQuery jQuery. Вам нужно нажать кнопку, она вызывает вызов 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. 
Смежные вопросы