2013-03-29 29 views
5

Sử dụng ajax và wordpress (cố gắng thực hiện đúng). Nó khá mới mẻ đối với tôi nhưng tôi đã làm việc này trước đây với sự tinh tế hơn. Dường như ngẫu nhiên bắt đầu có vấn đề vì vậy tôi đã phá vỡ mã của tôi xuống mức cơ bản nhất, và tôi thậm chí không thể có được điều đó để làm việc !!! Tôi cảm thấy như tôi chỉ cảm thấy thất vọng và nó buộc tôi phải bỏ lỡ một sai lầm đơn giản. Có gì không ổn với điều này?Tin nhắn thành công Ajax trả về HTML của trang chủ của tôi

jQuery của tôi:

$.post(
    ajaxurl, // http://localhost/mysite/wp-admin/admin-ajax.php 
    {action: "post-save"}, 
    function(response){ 
     alert(response); 
    } 
); 

PHP của tôi:

function update_post(){ 
    echo json_encode(array("success" => "all systems go"), JSON_FORCE_OBJECT); 
    exit; 
} 
add_action('wp_ajax_post-save', 'update_post'); 

Kết quả cuối cùng là các công trình cảnh báo, có nghĩa là $ .post là thành công (? Phải), nhưng lại biến response là nguồn html của trang chủ của tôi ...

Trả lời

3

Tôi đã tìm ra ...

Điều này có thể giúp một số người mới như bản thân tôi mắc lỗi tương tự, vì vậy tôi sẽ trả lời câu hỏi của riêng tôi :)

Hóa ra tôi chưa đăng nhập, xem hình. Tuy nhiên, câu trả lời là lạ và giúp tôi vứt bỏ, trả lại toàn bộ trang chủ. Lý do cho điều này là tôi đã bị chặn file chức năng của tôi trong đó bao gồm các responder Ajax như vậy:

function block_users() 
{ 
    if(!current_user_can('delete_pages')) { 
     wp_redirect(get_home_url(), 301); 
     exit; 
    } 
} 
add_action('admin_init','block_users'); 

tôi đáng lẽ phải biết để đăng nhập (nghĩ rằng tôi là) nhưng, kết quả bất ngờ như vậy và đó là thứ sáu :)

Cũng lưu ý cho bất kỳ ai tình cờ gặp vấn đề này: nếu bạn muốn ai đó làm ajax mà không đăng nhập sử dụng phiên bản không có đặc quyền của wp_ajax, wp_ajax_nopriv.

add_action('wp_ajax_nopriv_action', 'function'); 

Thay

add_action('wp_ajax_action', 'function'); 

Các cựu không yêu cầu sự cho phép, tức là được đăng nhập, để làm yêu cầu ajax.

+0

Có tôi có cùng một vấn đề, tôi đã nhận xét những dòng này. sau đó nó là ok bây giờ, nhưng làm thế nào tôi có thể chuyển hướng người dùng đến trang chủ? chức năng của tôi là hàm themeblvd_redirect_admin() { nếu (! current_user_can ('edit_posts')) { wp_redirect (site_url()); thoát; } } add_action ('admin_init', 'themeblvd_redirect_admin'); – Naveenbos

2

tôi đã cùng một vấn đề, và giải pháp là để thêm DOING_AJAX vào chức năng

function block_users() 
{ 
    if(!current_user_can('delete_pages') && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
     wp_redirect(get_home_url(), 301); 
     exit; 
    } 
} 
add_action('admin_init','block_users'); 
Các vấn đề liên quan