2012-05-14 36 views
7

Tôi gặp sự cố mà tôi gặp phải trong một ngày ... Tôi đang cố gắng sử dụng hàm ajaxPOST đơn giản để gửi dữ liệu đến cơ sở dữ liệu MySQL (không phải cơ sở dữ liệu WP).Cách thêm ajax vào chủ đề wordpress

Mã này nằm trong "single-post.php" trong chủ đề, vì nó phải được kiểm tra trước mỗi bài đăng.

$.ajax({ url: 'library/functions/admin_checkuser.php', 
    data: {action: userID}, 
    type: 'post', 
    success: function(output) { 
        alert(output); 
    } 
}); 

Tôi chỉ cần gửi biến cho tập lệnh "admin_checkuser.php" mà lần lượt gọi một tập lệnh khác thực hiện hành động trên cơ sở dữ liệu.

Đây là mã cho "admin_checkuser":

$userid = $_POST['action']; 

echo $userid;//for testing 
$oMySQL = new MySQL(); 
$query = "Select * FROM videotable WHERE uid = '$userid'"; 
$oMySQL->ExecuteSQL($query); 
$bb = $oMySQL->iRecords; 
$aa = $oMySQL->aResult; 
echo $bb; 

if ($bb == 0){ 
$query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
$oMySQL->ExecuteSQL($query); 
echo 'true'; 
    exit(); 

}else{ 
$sharing = mysql_result($aa,0,"share"); 
echo $sharing; 
exit(); 

} 

Nhưng tôi không nghĩ rằng các cuộc gọi đi qua kịch bản. Các tập lệnh này được kiểm tra bên ngoài WordPress và đã hoạt động, vì vậy nó phải là một cái gì đó trong WordPress chặn cuộc gọi ajax. BTW, tôi đã thử đặt "admin_checkuser.php" trong nhiều thư mục khác nhau nhưng không có gì hoạt động.

Xin cảm ơn trước.

+1

Sử dụng một cái gì đó như tab mạng của Firebug hoặc HTTPFox để xem liệu cuộc gọi ajax có thực sự xảy ra hay không hoặc xem nhật ký truy cập của máy chủ của bạn. –

Trả lời

2

Bạn nên kiểm tra url của mình cho cuộc gọi ajax.

Có thể sử dụng url đầy đủ thay vì url tương đối.

Có thể do vị trí chủ đề của bạn khiến url không chính xác. Tôi giả định mã ajax của bạn là trong thư mục chủ đề của bạn.

Có một số chức năng wordpress nhận thư mục chủ đề.

Ví dụ: nếu bạn ở trang này http://yourwebpage/test/ thì cuộc gọi ajax sẽ đến đây http://yourwebpage/test/library/functions/admin_checkuser.php. Điều này tôi giả định sẽ là vị trí không chính xác.

Đây là lý do tại sao bạn cần thêm url tuyệt đối vào tập lệnh của mình. Và nếu nó nằm trong chủ đề của bạn, bạn có thể sử dụng phương thức này get_template_directory_uri() để lấy thư mục mẫu.

Xem ở đây: http://codex.wordpress.org/Function_Reference/get_template_directory_uri

+0

10x rất nhiều !! Tôi lãng phí rất nhiều thời gian trên – user1108310

24

Bạn đang tốt hơn off bằng cách sử dụng Wordpress yêu cầu AJAX sẵn.

Vì vậy, trong chủ đề của bạn functions.php tập tin, thêm chức năng của bạn được gọi là, ví dụ:

function checkUser() { 

    $userid = $_POST['user']; //validation also :) 
    $oMySQL = new MySQL(); 
    $query = "Select * FROM videotable WHERE uid = '$userid'"; 
    $oMySQL->ExecuteSQL($query); 
    $bb = $oMySQL->iRecords; 
    $aa = $oMySQL->aResult; 
    echo $bb; 

    if ($bb == 0){ 
    $query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
    $oMySQL->ExecuteSQL($query); 
    echo 'true'; 
     exit(); 

    } else { 
    $sharing = mysql_result($aa,0,"share"); 
    echo $sharing; 
    exit(); 

    } 
} 

Sau đó, bạn thêm móc của bạn với kết nối với inbuilt Hệ thống AJAX

add_action('wp_ajax_check_user', 'checkUser'); 
add_action('wp_ajax_nopriv_check_user', 'checkUser'); 

wp_ajax_nopriv_%s cho phép nó được gọi từ giao diện người dùng.

Và sau đó, trong tệp javascript của bạn, bạn chỉ cần kích hoạt yêu cầu ajax của mình.

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { 
    alert(output); 
}); 

Nếu ajaxurl là undefined, bạn sẽ cần phải tạo ra nó trong mẫu tập tin của bạn, một cái gì đó như thế này nên làm việc, nhưng có những cách khác.

add_action('wp_head','ajaxurl'); 
function ajaxurl() { 
?> 
<script type="text/javascript"> 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script> 
<?php 
} 

Phụ trợ của wordpress thực hiện phần còn lại.

Sẽ có hành động được chuyển trong yêu cầu AJAX, tìm kiếm móc nối `wp_ajax(_nopriv)_%s tương ứng và sau đó gọi hàm được gán cho móc.

Nó cũng sẽ chuyển vào số $_POST hoặc $_GET tùy thuộc vào loại yêu cầu AJAX.

Bạn có thể đọc thêm một chút về cách sử dụng AJAX inside of Wordpress.

+0

Cảm ơn câu trả lời tuyệt vời! nơi chính xác tôi phải đặt "add_action", trong admin-ajax? chỉ cần ném nó ở đó? – user1108310

+0

Điều đó chỉ nằm trong tệp 'functions.php' của chủ đề, bên dưới hoặc bên dưới định nghĩa hàm là tốt để giữ trật tự! – Stoosh

+0

Vâng tôi đồng ý với Stoosh ở đây. Nó là tốt hơn để đi tuyến đường này. – Gohn67

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