2016-09-19 52 views
0

所以我試圖做一個聯繫表單的按鈕,而不是提交按鈕,單擊時運行一個函數onClick = 'send()'和本地主機W/WAMP它完美髮送電子郵件的內容。在現場版本上,連接很好,我收到了電子郵件,但是我沒有獲得相應的表單字段數據,即使它與在WAMP服務器上測試時使用的代碼相同。另外,在php文件的頂部,我回顯了POST數據,並在本地主機上顯示了這些信息,但是在實況上,它又沒有。爲什麼PHP不檢索AJAX發送的數據?

  • 我也試過.val()而不是.serialize()如下所示,但沒有運氣。
  • 我也做data: {name:name, email:email...}以及data{'name':name, 'email':email...}

任何幫助,將不勝感激!

繼承人的AJAX:

function send(){ 

    var name = $("input[name=name]").serialize(); 
    var email = $("input[name=email]").serialize(); 
    var textarea = $("textarea").serialize(); 
    var business = $("input[name=business]").serialize(); 
    var website = $("input[name=website]").serialize(); 

    alert(name); 
    alert(email); 
    alert(textarea); 
    alert(business); 
    alert(website); 

     $.ajax({ 
      url: 'sendmail.php', 
      type: 'POST', 
      data: {name, email, textarea, business, website}, 
      success: function(mydata) { 
       alert(mydata); 
      } 
     }); 

    } 

和繼承人的PHP:

<?php 

     echo($_POST['name']); 
     // does show as output on localhost w/wamp but on live website its mute 

     $message= 
     'Full Name: '.$_POST['name'].'<br /> 
     Email: '.$_POST['email'].'<br /> 
     Message: '.$_POST['textarea'].'<br /> 
     Current Website: '.$_POST['website'].'<br /> 
     Business Name: '.$_POST['business'].'<br /> 
     '; 

     /* Email Sending Script */ 

     if (!$mail->send()) { 
      echo $mail->ErrorInfo; 
     } else { 
      die("true");  
     } 

?> 

網絡TABS

請求報頭: http://prntscr.com/ck0btg

發表數據: http://prntscr.com/ck0cni

+3

你檢查了網絡,它有任何錯誤? – Beginner

+0

在成功函數下,添加一個'error:'函數,與'success:'相同。這是否輸出任何東西? – Howzieky

+0

如果你的JS沒有運行在同一臺服務器上,你需要添加'http:// localhost/xx.php' – James111

回答

0

顯然,我以前的網站的.htaccess文件是造成問題的原因。一旦我刪除它,它的工作。我認爲是因爲我做到了,所以網站的所有內容都要保存1個月(來自.htaccess的腳本),這就是導致它不能發送的原因。

0

嘗試在發送之前將數據編碼爲JSON。

$.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    dataType: "JSON", 
    data: $.toJSON(postData), 
    success: function(mydata){ 
     alert(mydata); 
    } 
}); 

或者,JSON.stringify(postData)

+0

代替postData我會輸入名稱,電子郵件等。正確嗎? –

+0

不起作用:( –

+0

1)要發送JSON負載,請求標頭應該包含「Content-type:application/json」。 2)OP將需要更改他們的PHP代碼以從'php:// input'讀取JSON負載。這是不符合OP的代碼,預計'應用程序/ x-www-form-urlencoded'數據 – Phil

0

嘗試是這樣的:

$.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    dataType: "JSON", 
    data: {"name":name, "email":email, "textarea":textarea, "business":business, "website":business}, 
    success: function(mydata){ 
     alert(mydata); 
    } 
}); 
+0

我認爲OP的瀏覽器支持ES6對象字面速記,所以這是沒有什麼不同 – Phil

+0

正如@Phil說,我也試過,沒有運氣。 –

1

使用.serialize()方法,如果您想發表形式的所有領域或者在你的代碼必須通過數據與關鍵指標,所以你可以在你的服務器端腳本使用該密鑰獲得數據的價值

$.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    dataType: "JSON", 
    data: $("Selector_of_Form").serialize(), 
    success: function(mydata){ 
     alert(mydata); 
    } 
});