我目前正試圖檢查一個HTML表單,如果用戶給出的電子郵件已經在數據庫中。所以如果get_user_by函數工作,我的PHP文件必須返回true。爲什麼Wordpress AJAX請求返回整個HTML頁面而不是json結果?
我按照所有WordPress的指引爲AJAX請求,並測試了這兩種方法,AJAX(jQuery和香草JS)。
jQuery的方法錯誤回調結束(對應於整個當前HTML頁面xhr.responseText),而香草JS方法在成功回調逐漸復甦,但始終返回0
首先,我註冊了我的ajax js文件並將其本地化以具有良好的admin-ajax.php網址。然後我得到我的自定義AJAX掛鉤:wp_ajax_nopriv_get_user_by_email其中,get_user_by_email是請求的操作數據。
<?php
/* Security access : Hacker can't access php files here */
defined('ABSPATH') or die('No script kiddies please!');
add_action('init', 'my_script_enqueuer');
function my_script_enqueuer() {
wp_register_script("ajax_user_call", MY_PLUGIN_URL.'js/ajax_user_call.js', array('jquery'));
wp_localize_script('ajax_user_call', 'myAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
wp_enqueue_script('jquery');
wp_enqueue_script('ajax_user_call');
}
if (is_admin()) {
add_action('wp_ajax_nopriv_get_user_by_email', 'my_plugin_ajax_get_user_by_email');
function my_plugin_ajax_get_user_by_email() {
my_plugin_log_me("Is there somebody ?");
// get the mail parameter from URL
$mail = $_REQUEST["mail"];
if (isset($_REQUEST["mail"]) && !empty($_REQUEST["mail"])) {
$user = get_user_by('email', $_REQUEST["mail"]);
if ($user == false) {
echo -2;
wp_die();
}
else {
$response['first_name'] = $user->first_name;
$response['last_name'] = $user->last_name;
wp_send_json($response);
}
}
else {
echo -3;
wp_die();
}
}
} ?>
現在我把ajax_user_call.js:
jQuery(document).ready(function() {
jQuery("#identificationEmailInput").blur(function() {
jQuery.ajax({
type: "post",
dataType: "json",
cache: false,
url: myAjax.ajaxurl,
data: { action: "get_user_by_email", mail: this.value },
success: function(response, statut) {
if(response == 0) {
console.log("Veuillez rentrer une adresse mail du Club Savignac");
}
else {
user = response;
console.log("USER : " + user);
}
},
error: function(xhr, textStatus, errorThrown) {
console.log("AJAX Request failed");
console.log(textStatus);
console.log(errorThrown);
console.log(xhr.responseText);
}
});
});
})
jQuery的( 「#identificationEmailInput」)值返回一個良好的電子郵件字符串。 url參數myAjax.ajaxurl返回好路徑:「http://mysite.fr/wp-admin/admin-ajax.php」。
我也試圖硬編碼像這樣的參數:
jQuery.post(
"../wp-admin/admin-ajax.php",
{
action: 'get_user_by_email',
mail: '[email protected]'
},
function(response) {
console.log(response);
}
);
然後,我也試圖與香草JS喜歡它:
var getJSON = function(url, param1, param2, successHandler, errorHandler) {
var xhr = new XMLHttpRequest();
xhr.open('post', url, true);
var params = "action=" + param1 + "&mail=" + param2;
console.log(params);
xhr.responseType = 'json';
xhr.onload = function() {
var status = xhr.status;
if (status == 200) {
successHandler && successHandler(xhr.response);
} else {
errorHandler && errorHandler(status);
}
};
xhr.send(params);
};
jQuery(document).ready(function() {
jQuery("#identificationEmailInput").blur(function() {
getJSON(myAjax.ajaxurl, 'get_user_by_email', jQuery("#identificationEmailInput").val(), function(data) {
console.log('user object: ' + data);
}, function(status) {
console.log('Something went wrong.');
});
});
})
但數據值始終返回0
任何人都有關於這個棘手問題的想法?最令人驚訝的是,它在兩天前就開始工作了,現在它已經不復存在了,而我沒有做任何改變。
是否有任何控制檯錯誤? – sarath