2013-08-18 95 views
1

我正在閱讀嘗試學習AJAX和JSON,並且在尋找體面的資源方面遇到了一些麻煩。我仍然有很多問題,所以我主要是在尋找資源。使用AJAX獲取發佈數據

我的目標是從wordpress文章中提取內容。我試着尋找教程和討論,但我發現的解決方案不適合我,或者我不喜歡,所以我不想正確理解我做錯了什麼。

我已經包括我的努力,迄今爲止,,但這不是我的主要問題

加載的腳本。

wp_enqueue_script('my-ajax-request', get_stylesheet_directory_uri() . '/js/ajax.js', array('jquery')); 
wp_localize_script('my-ajax-request', 'MyAjax', array('ajaxurl' => admin_url('admin-ajax.php'))); 

的JavaScript

jQuery(document).ready(function($) { 

    $('.ajax a').click(function(event) { 
    event.preventDefault(); 
    var id = $(this).data('id'); 

    $.ajax({ 
     type: 'POST', 
     url: MyAjax.ajaxurl, 
     data: {'action' : 'ajax_request', 'id': id}, 
     dataType: 'json', 
     success: function(data) { 
     console.log(data); 
     } 
    });  

    return false; 

    }); 

}); 

在這裏,我建立了我的行動。 如何對JSON進行編碼並返回要使用的發佈數據?

add_action('wp_ajax_nopriv_ajax_request', 'ajax_handle_request'); 
add_action('wp_ajax_ajax_request', 'ajax_handle_request'); 

function ajax_handle_request(){ 
} 
+0

什麼時候你想從帖子中發佈信息,發佈時或發佈後?你還想要拉什麼信息? – iRector

+0

僅供參考,有*是* [WordPress特定的堆棧交換站點](http://wordpress.stackexchange.com),雖然像這樣的問題*在這裏也是受歡迎的。 –

+0

另外,如果你的目標是一般性地瞭解AJAX和JSON,這個WordPress示例可能不是最好的起點,因爲WordPress並沒有真正具有這種類型的API(我不認爲),並且當然不是看起來很標準的一個,它會返回一個很好的JSON結果。我廣泛使用AJAX,但老實說,一直在努力嘗試用WordPress來做你想做的事情。 –

回答

0

使用功能wp_send_json_successwp_send_json_error返回Ajax請求的結果。

它們都使用wp_send_json,它負責標頭,JSON編碼和回顯以及死亡。

array(
    'url' => admin_url('admin-ajax.php'), 
    'nonce' => wp_create_nonce("my_long_unique_string_name"), 
) 

wp_ajax_*行動回調,並檢查它:

此外,你應該本地化腳本時發送一個隨機數

check_ajax_referer('my_long_unique_string_name', 'nonce'); 

例子:https://wordpress.stackexchange.com/a/106436/12615

+0

如何根據上面的答案調用這些函數? 我的解決方案是否顯示任何對ajax_request動作的調用在技術上都是成功的呢? – hyperdrive

+0

@hyperdrive,如果帖子ID沒有設置,我會返回一個錯誤。看到我鏈接的例子... – brasofilo

2

我能夠通過設置全球美元來解決這個問題發佈以獲取$ post變量。

然後打印出$ response數組。

add_action('wp_ajax_nopriv_ajax_request', 'ajax_handle_request'); 
add_action('wp_ajax_ajax_request', 'ajax_handle_request'); 

function ajax_handle_request(){ 

    $postID = $_POST['id']; 
    if (isset($_POST['id'])){ 
     $post_id = $_POST['id']; 
    }else{ 
     $post_id = ""; 
    } 

    global $post; 
    $post = get_post($postID); 

    $response = array( 
     'sucess' => true, 
     'post' => $post, 
     'id' => $postID , 
    ); 

    // generate the response 
    print json_encode($response); 

    // IMPORTANT: don't forget to "exit" 
    exit; 
} 

使用jQuery檢索數據和輸出。

jQuery(document).ready(function($) { 

    $('.ajax a').click(function(event) { 
    event.preventDefault(); 
    var id = $(this).data('id'); 

    $.ajax({ 
     type: 'POST', 
     url: MyAjax.ajaxurl, 
     data: {'action' : 'ajax_request', 'id': id}, 
     dataType: 'json', 
     success: function(data) { 
     console.log(data['post']); 
     } 
    });  

    return false; 
    }); 
});