好的,那么您的代码有多个问题。。。
1。脚本的本地化不正确
以下是您的函数,用于对脚本进行排队和本地化:
function my_theme_enqueue_scripts() {
wp_enqueue_script(\'jquery-ui\', \'https://code.jquery.com/ui/1.12.1/jquery-ui.min.js\', array(\'jquery\'), \'1.12.1\');
wp_register_script( \'myjs\', get_stylesheet_directory_uri() . \'/my.js\', array(\'jquery\'),\'1.0.0\');
wp_enqueue_script(\'myjs\');
wp_localize_script( \'ajax-script\', \'admin-ajax\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_scripts\' );
所以您本地化了名为
ajax-script
, 但没有注册这样的脚本。它应该是:
wp_localize_script( \'myjs\', \'admin-ajax\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
2。中的变量名称不正确wp_localize_script
第二个参数是将在JS中创建的变量的名称。你把admin-ajax
这不是变量的正确名称。
将其更改为:
wp_localize_script( \'myjs\', \'MyJS_Data\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
3。中的AJAX url不正确$.ajax
在my中调用。您拥有的js文件:
$("#form-pm").submit(function(e) {
e.preventDefault();
var pID = getUrlVars()["id"];
$.ajax({
url: "admin-ajax.ajax_url",
type: "POST",
data: {
所以你传递了一个字符串
"admin-ajax.ajax_url"
字符串作为URL,但这不是正确的URL地址。。。
它应该是:
url: MyJS_Data.ajax_url,
因为您想使用变量,而不是字符串,我们在2中更改了该变量的名称。。。
4。AJAX回调函数的用法不正确
在PHP代码中,您有:
function load_projectmessages($projectid) {
global $wpdb;
$sql_displaymessages = $wpdb->prepare("some sql", $projectid );
$projectmessages = $wpdb->get_results($sql_displaymessages);
return $projectmessages;
wp_die();
}
add_action(\'wp_ajax_load_projectmessages\', \'load_projectmessages\');
但是。。。此函数不打印任何内容,因此AJAX请求不会得到任何结果。
另一方面,你要做两件事:
return $projectmessages;
wp_die();
因此,您的函数将返回(而不是打印)$projectmessages。不会调用下一行,因为当您返回值时,函数将结束其执行。
所以应该是这样的:
function load_projectmessages($projectid) {
global $wpdb;
$sql_displaymessages = $wpdb->prepare("some sql", $projectid );
$projectmessages = $wpdb->get_results($sql_displaymessages);
echo json_encode( $projectmessages );
wp_die();
}
add_action(\'wp_ajax_load_projectmessages\', \'load_projectmessages\');
这样,您的函数将“返回”编码为JSON的$projectmessages。