2011-01-10 66 views
2

據我所知,這個腳本在Chrome和IE中工作正常。它在Firefox中無法正常工作。 (不是承諾,一切工作完美 - 偶爾電子郵件沒有通過,但我們一直沒有能夠重新創建該錯誤。)使用jquery發送電子郵件不工作:PHP

編輯:現在看來,在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的問題 - 所以你的問題是有點誤導,因爲PHP的郵件()在這裏是沒有問題的。 – 2011-01-10 15:02:07

+0

編輯標題以反映問題不再侷限於Firefox。 – Michelle 2011-01-10 15:29:13

+0

如果我註釋掉submitForm();線,電子郵件會在第一次加載時,在Chrome和Firefox中發送。烏蘭布...? – Michelle 2011-01-10 16:04:00

回答

-1

嘗試檢查if(isset($_POST["whatever"]) AND $_POST["whatever"])。發送字符串「true」是瀏覽器慣例。

3

你可能沒有給它足夠的機會通過AJAX發送表單您提交給貝寶之前,請嘗試將success AJAX功能內的submitForm()功能。

0

這是一個JavaScript錯誤。不是PHP錯誤。在Firefox上安裝firebug,啓用控制檯,堅持所有錯誤並嘗試運行腳本。你會看到問題。

此外,JavaScript條件與PHP略有不同。如果(blah =='')是錯誤的編碼。

如果你想要的長度應該是:if(blah.length> = 1)。我會看看你的JavaScript,看看是否有什麼突出..

但是,答案是在您的Firefox控制檯調試。

好的,這是你的問題... 您正在提交表單,試圖在您收到jquery 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.