2013-04-29 128 views
9

我使用這個jQuery的AJAX腳本發送電子郵件:只有當我指定文件路徑

$.ajax({ 
     url: process.php,  
     type: "POST", 
     data: data,   
     cache: false, 
    ... 

url我打電話發送電子郵件的PHP文件,但阿賈克斯得到它完整路徑:

url: "http://www.domain.com/wp-content/themes/site_theme/templates/process.php", 

但我不得不使用這樣的語法:

url: "../../templates/process.php", 

,或者使用一個變量來聲明我n中的HTML頁眉/頁腳

的Html

<script type="text/javascript"> 
    var urlMail = '<?php bloginfo('template_url'); ?>/templates/process.php'; 
</script> 

腳本

url: "../../templates/process.php", 

但與上述兩種情況下的瀏覽器控制檯檢索該錯誤:

POST http://www.domain.com/templates/process.php 404 Not Found 1.56s 

w ^我錯了嗎?

+0

更換

data: data 

解決 「模板/ process.php」,'? – jtheman 2013-04-29 08:23:29

+0

指定完整路徑有什麼問題? – Musa 2013-04-29 08:37:44

+0

@jtheman:用你的解決方案,它檢索到這個錯誤'POST http://www.domain.com/contact-page/templates/form-contatti-mail.php 404 Not Found 1。34s' – 2013-04-29 08:43:55

回答

20

這不是在wordpress中實現ajax的方法。所有的Ajax請求應該被設置爲admin-ajax.php

在你的模板文件:

<script type="text/javascript"> 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script> 

在您的JS:

$.ajax({ 
     url: ajaxurl,  
     type: "POST", 
     cache: false, 
     data: data + '&action=sendmail' //action defines which function to use in add_action 
}); 

到functions.php:

function send_my_mail(){ 
#do your stuff 
} 

add_action('wp_ajax_sendmail', 'send_my_mail'); 
add_action('wp_ajax_nopriv_sendmail', 'send_my_mail'); 

閱讀Ajax in Plugins。 `網址:

+0

我不知道。我會閱讀,但我沒有開發插件!這是一個簡單的聯繫表格。或者我每次使用ajax都必須使用這種方式? – 2013-04-29 09:40:50

+0

想你的代碼,我得到錯誤:'的ReferenceError:sendmail的是沒有定義 - 動作:sendmail的,',它重新加載頁面 – 2013-04-29 10:04:15

+0

我忘了周圍的引號。更新我的答案! – RRikesh 2013-04-29 10:14:24

0

我會建議你使用Registry等系統來保存所有「全局」值在一個地方。

Registry design pattern

還有就是我小的jQuery插件,如果這是可能是有趣的你。 GitHub rep

<script type="text/javascript"> 
    $.Registry.set('urlMail', '<?php get_bloginfo('template_url'); ?>/templates/process.php'; 
</script> 

並獲得從註冊表值,您必須使用$ .Registry.get( 'urlMail');

+0

感謝,但我寧願不僅適用於使用插件。除此之外,我已經在使用另一個腳本的「變量方法」並且它可以工作。我不明白爲什麼它不適合這個! – 2013-04-29 09:24:38

0

您是否嘗試過我使用RRikesh提供的代碼,但與

data: data + '&action=sendmail' 
+3

你真的應該作出@ RRikesh的答案正確的答案,因爲這個答案涉及另外校正你的Ajax調用,而不是原來的問題,其涉及到的文件路徑,他在上面回答。我知道這聽起來很挑剔,但綠色的勾號是人們去尋找問題答案的地方。 – happilyUnStuck 2013-07-07 23:51:03

+1

我編輯了RRikesh的答案,使其正確,因爲它的評分最高。我認爲這應該是首要的課程,因爲它是正確的答案,只需要一個小小的編輯。 – Jake 2014-03-11 17:13:17