2014-02-10 89 views
0

我不明白爲什麼以下不工作,我想調用一個PHP腳本來發送電子郵件,但我不認爲我的ajax調用是根本調用PHP腳本,我只是返回一個錯誤。AJAX後調用PHP腳本不工作

我的Ajax調用:

 var name_field = $('#cf_name').val(); 
     $.ajax({ 
      type: 'post', 
      url: 'contact.php', 
      data: {'name_field' : name_field }, 
      dataType: 'json', 
      success: function(data) { 
       if(data.status == 'success') 
        alert("Thank you for subscribing!"); 
       else if(data.status == 'error') 
        alert("Error on query!"); 
      }, 
      error: function(err) { 
       alert(err.responseText); 
      } 
     }); 

我的PHP腳本:

$field_name = isset($_POST['name_field']); 
$field_email = '[email protected]'; 
$field_phone = '12345'; 
$field_message = 'Hello World!'; 

$mail_to = '[email protected]'; 
$subject = 'Message from a website visitor '.$field_name; 

$body_message = 'This message has been sent via website:'."\n\n"; 
$body_message .= 'From: '.$field_name."\n\n"; 
$body_message .= 'E-mail: '.$field_email."\n\n"; 
$body_message .= 'Phone Number: '.$field_phone."\n\n"; 
$body_message .= 'Message: '.$field_message; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { 
    $response_array['status'] = 'success'; 
} 
else { 
    $response_array['status'] = 'error'; 
} 
header('Content-type: application/json'); 
echo json_encode($response_array); 

如果我瀏覽到的URL直接在PHP按預期工作,但我不能讓AJAX後調用它。

+0

當你嘗試ajax會發生什麼?你有沒有去過阿賈克斯線?你到達成功的功能嗎?你是否有錯誤功能? –

+0

使用devtools查看網絡選項卡(firebug/fox/chrome)中ajax請求的狀態,並查看是否幫助或粘貼結果到您的問題中,同時嘗試使用絕對URL,如果您獲得了404網址是不正確的。 – Allende

+0

我絕對打到ajax調用的錯誤響應。儘管err.responseText爲空。 – LolBB

回答

0

看到這個:jQuery Ajax post cancelled我不是一個js專家,但我同意你的問題是你的ajax調用的異步執行,因爲它需要一段時間來發送電子郵件,也許沒有及時完成你的js

看到這個漂亮的解釋關於Ajax調用的 「異步」 propertie:

What does "async: false" do in jQuery.ajax()?

而且看到這個提問/回答:

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

+0

感謝您的幫助! – LolBB

+0

不客氣! – Allende

1

$ field_name不是一個實際的字符串,它是一個布爾值,因爲您使用了$ field_name = isset($ _ POST [name_field'])。刪除isset()。

+0

謝謝,這不是問題,但肯定是一個問題,謝謝。 – LolBB

+0

唉,我試了你的代碼在我的服務器上,它工作正常。我沒有收到任何錯誤。 http://shadeoftruth.com/看看。 –

0

您應該檢查url: contact.php,因爲您沒有指定完整的URL,所以您的帖子將轉到相對路徑。根路徑將是相同的當前腳本路徑。