2010-10-20 22 views
0
$("#contact-us-form").submit(function() { 

    var nameVal = $("input[name=name]").val(); 
    var companyVal = $("input[name=company]").val(); 
    var titleVal = $("input[name=title]").val(); 
    var emailVal = $("input[name=email]").val(); 
    var phoneVal = $("input[name=phone]").val(); 
    var messageVal = $("input[name=message]").val(); 

    alert(nameVal); 
    alert(emailVal); 

    $.post("/mailer.php", { 
     name: nameVal, 
     company: companyVal, 
     title: titleVal, 
     email: emailVal, 
     phone: phoneVal, 
     message: messageVal 
    }, function (data) { 
     alert("Data Loaded: " + data); 
     $('#thanks').show(); 
    }); 
}); 

mailer.php中,它包含:

<?php 

if(isset($_POST['submit'])) { 

    $to = "[email protected]"; 
    $subject = "Inquiry"; 
    $name = $_POST['name']; 
    $company = $_POST['company']; 
    $title = $_POST['title']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $message = $_POST['message']; 

    $body = <<<HEREDOC 
     From: $name 
     Company: $company 
     Title: $title 
     E-Mail: $email 
     Phone: $phone \n 
     Message: $message 
HEREDOC; 

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

} 

?> 

我看到nameemail警報與正確的數據,但數據警報是空的,只是顯示Data Loaded:,所以我猜測數據沒有正確提交。

我該如何解決?

非常感謝!

+0

當您使用jQuery發佈時,DATA的值將從您的服務器端處理程序mailer.php返回。它返回什麼?你是否設置了一個斷點來查看你發佈的內容?它是否返回任何東西?你使用Firebug/Web Inspector來查看請求/響應的樣子嗎? – 2010-10-20 05:50:38

+0

也許你的PHP腳本有錯誤? – 2010-10-20 05:50:49

+0

您可以安裝Firefox「TamperData」插件,查看瀏覽器發送的內容以及服務器發回的內容。 – Pointy 2010-10-20 05:53:29

回答

0

只需添加return false;和它的工作! :)

+0

'return false;'在'submit'或'event.preventDefault();';''末尾的任何位置''submit'將會阻止頁面在提交時更改/刷新因此,在JS有機會d之前,你的頁面正在發生變化它的工作。 – 2010-10-20 16:39:47

1

「數據」回調是您要發佈的表單進行迴應的表單。所以,它的內容取決於mailer.php應該如何迴應。


編輯: 有在mailer.php沒有「回聲/打印」,所以沒有辦法讓你知道,如果郵件成功。除了您沒有清理內容或檢查有效的電子郵件地址外,您應該在最後迴應基本成功或真或假的消息,以便您可以告訴JavaScript要執行的操作。

所以,像

$result = mail($to, $subject, $body); 
if($result) 
echo 'success'; 

然後,在你的js回調

if(data=="success") 
{ 
$('#thanks').show(); 
} 
else{ 
$('#error').show(); 

編輯#2:是否提交輸入元素實際上具有名稱 '提交'?這可能會導致你每次只檢查isset()

+0

包含在說明中的mailer.php。 – 3zzy 2010-10-20 06:01:33

+0

@Nimbuz - 它看起來像郵件發送沒有任何信息(它沒有輸出),因爲它只是發送一封電子郵件。 – 2010-10-20 06:10:15

+0

向mailer.php添加了回聲,仍然沒有。 :( – 3zzy 2010-10-20 06:15:07

0

看起來像mailer.php沒有任何反應。它看起來好像在發送電子郵件,所以這就是爲什麼data是空的。 post回調確實觸發的事實表明數據已發送至mailer.php

您可以使用回調的第二個參數進行檢查:

, function (data, textStatus) { 
     alert("Data Loaded: " + textStatus); 
     $('#thanks').show(); 

或完全相同的使用arguments陣列:

, function() { 
     alert("Data Loaded: " + arguments[1]); 
     $('#thanks').show(); 

如果你想data實際上包含的東西,那麼你可以在mailer.php中輸出subject,比如:

... 
echo $subject; 
mail($to, $subject, $body); 

現在alert(data)應該工作。


同時,一定要防止默認提交表單的,所以頁面沒有改變,而這種情況正在發生:

$("#contact-us-form").submit(function (event) { 
    event.preventDefault(); 
    ... 
+0

試過了,表單仍然沒有提交。 – 3zzy 2010-10-20 08:48:45

+0

什麼'textStatus'?是否說'成功'? – 2010-10-20 16:28:40