2013-04-29 48 views
9

tôi sử dụng script jquery-ajax này để gửi email:đường dẫn tập tin cho AJAX kịch bản (trong Wordpress)

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

trong url tôi gọi là tập tin php sẽ gửi email, nhưng ajax nhận được nó chỉ khi tôi xác định đường dẫn đầy đủ:

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

nhưng tôi phải sử dụng một cú pháp như thế này:

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

hoặc sử dụng một biến khai báo i n html header/footer

Html

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

Script

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

nhưng với cả hai trường hợp trên trình duyệt giao diện điều khiển lấy lỗi này:

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

W Tôi có sai không?

+0

bạn đã thử: 'url: "templates/process.php",'? – jtheman

+0

Có gì sai khi chỉ định đường dẫn đầy đủ? – Musa

+0

@jtheman: với giải pháp của bạn, nó truy xuất lỗi này 'POST http://www.domain.com/contact-page/templates/form-contatti-mail.php 404 Không tìm thấy 1.34s' –

Trả lời

20

Đó không phải là cách để triển khai ajax trong wordpress. Tất cả yêu cầu ajax phải được gửi đến admin-ajax.php.

Trong file template của bạn:

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

Trong js của bạn:

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

trong functions.php của bạn:

function send_my_mail(){ 
#do your stuff 
} 

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

Đọc về Ajax in Plugins.

+0

Tôi không biết điều đó. Tôi sẽ đọc, nhưng tôi không phát triển một plugin! nó là một hình thức liên lạc đơn giản. hoặc tôi phải sử dụng theo cách đó mỗi khi tôi sử dụng ajax? –

+0

Đã thử mã của bạn và tôi gặp lỗi: 'Tham chiếuError: sendmail không được xác định - hành động: sendmail,' và nó tải lại trang –

+0

Tôi quên đặt dấu ngoặc kép xung quanh nó. Cập nhật câu trả lời của tôi! – RRikesh

0

Tôi sẽ khuyên bạn nên sử dụng hệ thống như Registry để lưu tất cả các giá trị "toàn cầu" ở một nơi.

Registry design pattern

Có nhỏ jQuery plugin của tôi nếu điều này là có thể thú vị cho bạn. GitHub rep

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

Và để lấy giá trị từ Cơ quan đăng ký, bạn phải sử dụng $ .Registry.get ('urlMail');

+0

cảm ơn nhưng tôi không muốn sử dụng plugin chỉ cho điều đó. bên cạnh đó tôi đã sử dụng "phương pháp biến" đó với một tập lệnh khác và nó hoạt động. Tôi không hiểu tại sao nó không hoạt động cho việc này! –

0

Tôi đã giải quyết bằng cách sử dụng mã được cung cấp bởi RRikesh nhưng thay

data: data 

với

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

Bạn thực sự phải trả lời câu trả lời đúng, vì câu trả lời này liên quan đến một sửa đổi bổ sung cho cuộc gọi ajax của bạn chứ không phải câu hỏi gốc liên quan đến đường dẫn tệp, và mà anh ta đã trả lời ở trên. Tôi biết nó nghe có vẻ kén chọn, nhưng ve màu xanh lá cây là nơi mọi người đi tìm câu trả lời cho câu hỏi được hỏi. – happilyUnStuck

+1

Tôi đã chỉnh sửa câu trả lời của RRikesh để làm cho nó đúng, vì nó được đánh giá cao nhất. Tôi nghĩ rằng điều này nên có được các khóa học ở nơi đầu tiên vì nó là câu trả lời đúng và chỉ cần một chỉnh sửa nhỏ. – Jake

Các vấn đề liên quan