我想使用jQuery Ajax重新加载页面。我有下面的代码,但是它不工作,正在返回错误的[object Object]
这只是一个简单的语法问题,还是我的整个逻辑有问题?它在没有Javascript的情况下运行得很好,但是我认为jQuery Ajax的UI更直观。
functions.php s.php
//enqueue scripts
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' );
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');Page模板PHP:
my.js
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
if($.inArray(hash[0], vars)>-1)
{
vars[hash[0]]+=","+hash[1];
}
else
{
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
}
return vars;
}
$("#form-pm").submit(function(e) {
e.preventDefault();
var pID = getUrlVars()["id"];
$.ajax({
url: "admin-ajax.ajax_url",
type: "POST",
data: {
action: "load_projectmessages",
projectid: pID
},
success: function(data) { },
error: function(errorData) { alert(errorData); }
});
return false;
});发布于 2019-02-20 08:22:33
好吧,所以你的代码有很多问题.
的不正确本地化
下面是您的函数,它对脚本进行排队和本地化:
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' ) ) );的不正确名称
在wp_localize_script中,第二个参数是将在JS中创建的变量的名称。您将admin-ajax放入其中,这并不是变量的正确名称。
改为:
wp_localize_script( 'myjs', 'MyJS_Data', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );$.ajax call中不正确的AJAX url
在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中更改了变量的名称.
在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。
https://wordpress.stackexchange.com/questions/329295
复制相似问题