Wordpress:AJAX无法正常工作

时间:2015-04-07 09:54:08

标签: ajax wordpress

我正在设置插件。现在我试图让AJAX-PHP代码正常工作,但我没有获得成功数据,所有数据都以错误结束。

tracker.php是主要的插件文件。

这是我的tracker.php上的函数,它打印标题和一些HTML代码:

require_once dirname(__FILE__) . '/user-listing.php';

function trez_tracker_user_listing(){
    ?>
    <h1>Tracker - User List</h1>
    <div class="clicker">Click here</div>
    <div id="printer"></div>
    <?php    
}//trez_tracker_user_listing

所以在user-listing.php中我添加了以下代码:

function user_listing_enqueuer() {
   wp_register_script( "ajax_user_request", WP_PLUGIN_URL.'/tracker/script/ajax_user_request.js', array('jquery') );
   wp_localize_script( 'ajax_user_request', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
   wp_enqueue_script( 'jquery' );
   wp_enqueue_script( 'ajax_user_request' );
}
add_action( 'init', 'user_listing_enqueuer' );

function user_fetcher(){
    $result = 'Message to display';
    return $result;
}//user_listing
add_action("wp_ajax_user_fetcher", "user_fetcher");

最后是/script/ajax_user_request.js中的javascript代码:

/* ajax_user_request.js */
jQuery(document).ready( function() {
    jQuery(".clicker").click( function() {

      jQuery.ajax({
         type : "post",
         dataType : "json",
         url : myAjax.ajaxurl,
         data : {action: "user_fetcher"},
         success: function(response) {
             if(response.type == "success") {
                 jQuery("#printer").html(response)
             }
             else {
                 alert("AJAX error")
             }
         }//success
      })//jQuery.ajax   
    })//Clicker function
})//document ready

点击<div>时,我只收到提示信息&#34; AJAX错误&#34;。 我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:3)

您收到错误是因为您没有返回JSON数据,而是通过user_fetcher函数返回字符串。

function user_fetcher(){
    $result = 'Message to display';
    return $result;
}//user_listing

更改user_fetcher函数,以便将JSON数据返回给AJAX调用。

function user_fetcher(){
    $result = 'Message to display';
    echo json_encode(array('type'=>'success', 'message'=>$result));
    die(0);
}//user_listing

在jquery中检查响应如下:

success: function(response) {
     if(response.type == "success") {

         // Add message
         jQuery("#printer").html(response.message)
     }
     else {
         alert("AJAX error")
     }
 }//success

对于钩子wp_ajax_user_fetcher,请确保您在登录后使用此功能,如果您未在管理部分登录,则必须使用wp_ajax_nopriv_user_fetcher。或者你可以同时使用两者:

// Work if user is login
add_action("wp_ajax_user_fetcher", "user_fetcher");

// Work if user is not login
add_action("wp_ajax_nopriv_user_fetcher", "user_fetcher");