[英]Wordpress: Ajax call doesn't work (Error 400 Bad Request)
簡而言之:從 Javascript 文件調用 Ajax,但 php function 沒有“聽到”調用。 在我的例子中,PHP 和 Javascript 在不同的文件中。 我通過以下方式證明它們在 functions.php 中加載正確:
function LoadScriptsOnSpecificPages(){
global $wp_query;
$page_id = intval($wp_query->queried_object->ID);
// Page ID 2614 = Buchung Auswahl Raum, Page ID 2654 = Buchung abschließen
if (($page_id = 2614) or ($page_id = 2654)) {
include get_stylesheet_directory() . '/custom/booking.php';
wp_enqueue_script( 'script', get_stylesheet_directory_uri() . '/custom/booking.js', array( 'jquery' ), 1.1, true);
}
}
add_action('template_redirect', 'LoadScriptsOnSpecificPages');
在頂部的“booking.php”中:
//Define AJAX URL and requests
function define_ajax_url() {
echo '<script type="text/javascript">
var ajaxurl = "' . admin_url('admin-ajax.php') . '";
</script>';
}
add_action('wp_head', 'define_ajax_url');
// Action hooks that work with the WordPress AJAX functionality
// wp_ajax_nopriv_ action Hooks bewirken, dass der Ajax-Request auch bei Website-Besuchern läuft,
// die nicht eingeloggt sind.
add_action( 'wp_ajax_AjaxSessionIDerzeugen', 'AjaxSessionIDerzeugen' );
add_action( 'wp_ajax_nopriv_AjaxSessionIDerzeugen', 'AjaxSessionIDerzeugen' );
問題:同樣在文件“booking.php”中應該調用的 function,但遺憾的是從未調用過:
// Ajax Session ID erzeugen
function AjaxSessionIDerzeugen() {
$ip_adresse = $_SERVER["REMOTE_ADDR"];
global $wpdb;
$wpdb->show_errors();
// $_REQUEST contains the data sent via AJAX from the Javascript call
if ( isset($_REQUEST) ) {
$session_id = substr(md5(time()), 0, 10);
$strsql = sprintf("INSERT INTO tbl_buchungen (session_id) VALUES session_id= '%s'",$session_id);
$wpdb->query($strsql);
// Callback
callback:
$arr = array();
$arr['pruefergebnis'] = "ok";
$arr['session_id'] = $session_id;
$antwort_json = json_encode($arr);
echo $antwort_json;
}
// Always die in functions echoing AJAX content
die();
}
在文件“booking.js”中,Ajax-Call 不起作用。 錯誤:無法加載資源:服務器響應狀態為 400(錯誤請求)
if ((session_id == '') || (session_id == null)) {
$.ajax({
url: ajaxurl, // Since WP 2.8 ajaxurl is always defined and points to admin-ajax.php
data: {
'action':'AjaxSessionIDerzeugen', // PHP function
},
// Callback
success:function(antwort) {
let object = JSON.parse(antwort);
pruefergebnis = object.pruefergebnis;
if (pruefergebnis == 'ok') {
session_id = object.session_id;
document.cookie = "session_id=" + session_id + "; expires=3600000; path=/";
} else {
window.alert(pruefergebnis);
}
},
error: function(errorThrown){
window.alert(errorThrown);
}
});
}
admin-ajax URL 在管理端可用,對於前端你需要定義它,我糾正了一些小錯誤並在我的本地測試它正在工作
$.ajax({
type: "POST",
url: ajaxurl, //you need to point to correct URL if you are working on frontend
data: {
action:'AjaxSessionIDerzeugen', // PHP function
},
// Callback
success:function(antwort) {
let object = JSON.parse(antwort);
pruefergebnis = object.pruefergebnis;
if (pruefergebnis == 'ok') {
session_id = object.session_id;
document.cookie = "session_id=" + session_id + "; expires=3600000; path=/";
} else {
window.alert(pruefergebnis);
}
},
error: function(errorThrown){
window.alert(errorThrown);
}
});
它不起作用的原因是,在主題的 functions.php 中,我將文件 booking.php 和 booking.js 的加載限制在我需要的頁面(通過頁面 ID)。 這是一個錯誤。 我現在可以使用的 functions.php 中的代碼是:
include get_stylesheet_directory() . '/custom/booking.php';
function LoadScript() {
wp_enqueue_script( 'script', get_stylesheet_directory_uri() . '/custom/booking.js', array( 'jquery' ), 1.1, true);
}
add_action('template_redirect', 'LoadScript');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.