2012-04-18 123 views
1

我正在使用wordpress ajax調用來從wordpress主題functions.php中的函數返回簡單的內容。但是,將返回完整的html頁面。WordPress的Ajax從functions.php返回完整的HTML頁面,而不是回聲

這裏是Ajax調用

<?php 
$ajax_nonce = wp_create_nonce("iwhq_beginner_select_course"); 
?> 

<script type="text/javascript" language="javascript"> 
jQuery(document).ready(function(){ 

jQuery("#beg_golf_course").change(function() { //do this when course changes 

//in Wordpress ajaxurl always points to admin-ajax.php 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
var course_id = 4; 

//Do the ajax 
    jQuery.ajax({ 
     type: "POST", 
     url: ajaxurl, 

     //NOTE - the action parameter calls the function in functions.php 
     data: { action: 'select_course_aj', course_id: course_id, _ajax_nonce: '<?php echo $ajax_nonce; ?>' }, 


     //display alert on success 
     success: function(html){ 
      alert(html); 
     } 
    }); //close jQuery.ajax(
    return false; 

    }); 
}); 
</script> 

這是

function select_course_func(){ 
echo $_POST["course_id"]; 
die(); 
} 

add_action('wp_ajax_select_course_aj','select_course_func'); 

包含了jQuery AJAX調用頁面的HTML實際上是顯示在警報,而不是在functions.php中的作用回聲。

任何天才都能告訴我爲什麼?

感謝 馬克

+0

我在函數.php中包含了select_course_func PHP調用中的nonce調用,但得到了相同的結果。 check_ajax_referer('iwhq_beginner_select_course','_ajax_nonce'); – Markol 2012-04-18 20:43:02

+0

你看過Firebug中的請求/響應了嗎? – 2012-04-18 20:46:24

+0

那麼究竟是什麼提醒?你期待'4'是否正確?最新發生的是你在加載和html 404頁面上使用html函數的div嗎?檢查您發送ajax呼叫的網址。像傑伊布蘭查德說,你可以很容易地做到這一點在螢火蟲或鍍鉻網絡標籤。 – Rooster 2012-04-18 21:35:05

回答

4

OK,問題解決了。看到我上面的最後3條評論加上...

!defined('DOING_AJAX')是一個常量,可以用來測試用戶沒有執行ajax請求。我將其與我的邏輯相結合,將非管理員重定向到前端,現在可以工作。

/* check the role of current loged in user for redirection */ 
add_action('admin_init','rt_checkRole'); 
function rt_checkRole() { 

    global $wp_roles; 
    $currentrole =''; 
    foreach ($wp_roles->role_names as $role => $name) { 
     if (current_user_can($role)){ 
        $currentrole = $role; 
       } 
     } 
     if(!defined('DOING_AJAX') && (!$currentrole || ($currentrole != 'administrator' && $currentrole != 'editor'))){ 
      wp_redirect (site_url().'/front-end-login/'); 
     } 
} 

https://wordpress.stackexchange.com/questions/26100/redirect-out-of-wp-admin-without-losing-admin-ajax-php

感謝所有評論誰發現了!定義( 'DOING_AJAX')。

+0

但是爲什麼所有的HTML都是原來的? – 2013-01-29 17:56:28

+0

我添加了哪個文件? – RenegadeAndy 2014-11-18 16:48:03

0

如果你想要做的Ajax調用非管理員用戶,你應該使用下面的代碼,這將禁止非管理員用戶可溼性粉劑管理員的訪問,但允許AJAX調用爲每一位用戶,登錄或註銷用戶

function my_admin_init(){ 
    if(!defined('DOING_AJAX') && !current_user_can('administrator')){ 
     wp_redirect(home_url()); 
     exit(); 
    } 
} 
add_action('admin_init','my_admin_init'); 
相關問題