我正在设置插件。现在我试图让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;。
我该如何解决?
谢谢!
答案 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");