Javascript 全局变量和ajax请求-为什么我的全局变量没有随着i';m使用异步:错误模式?
有了这个很棒的网站,我可以学习如何在wordpress中设置ajax请求,但无法使用全局变量。我对wordpress和ajax编程还是新手。 我的问题如下:我查询了在全局$stmts['getCriteriasposts']数组中存储100个wp_帖子,并在网格中显示了前4项$wpdb_position是一个全局变量,给出此stmts数组中的当前位置。当用户单击网格中的某个项目时,我希望将当前帖子替换为数组中要读取的下一个项目,该项目位于网格中的同一位置。 由于显示了四个项目,在单击任何帖子之前,$wpdb_position=4。 但是当我发送Ajax请求以增加全局变量$wpdb_position=0时,即使Ajax请求处于同步模式,并且请求对本地数据有效。我看不出我错在哪里。 任何帮助都会非常有用。 非常感谢 json输出是 对象 位置:“2” wpdb_位置:1 代码如下:Javascript 全局变量和ajax请求-为什么我的全局变量没有随着i';m使用异步:错误模式?,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,有了这个很棒的网站,我可以学习如何在wordpress中设置ajax请求,但无法使用全局变量。我对wordpress和ajax编程还是新手。 我的问题如下:我查询了在全局$stmts['getCriteriasposts']数组中存储100个wp_帖子,并在网格中显示了前4项$wpdb_position是一个全局变量,给出此stmts数组中的当前位置。当用户单击网格中的某个项目时,我希望将当前帖子替换为数组中要读取的下一个项目,该项目位于网格中的同一位置。 由于显示了四个项目,在单击任何帖子之前
// Functions.php
add_action( 'template_redirect', 'ajax_script_enqueuer' );
function ajax_script_enqueuer() {
$nonce = wp_create_nonce("my_action_callback");
wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/../../../js/epointplus/epointplusevalframe.js', array('jquery') );
wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url('admin-ajax.php') ) );
}
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
add_action( 'admin_post_nopriv_my_action', 'manage_callback_loadnext' );
add_action( 'admin_post_my_action', 'manage_callback_loadnext' );
function my_action_callback() {
global $wpdb;
global $stmts;
global $wpdb_position;
$wpdb_position = $wpdb_position + 1;
//$criteria = $stmts['getCriteriasposts'][$wpdb_position];
$result['wpdb_position'] = $wpdb_position;
$result['position'] = $_POST["position"];
echo json_encode($result);
die(); // may not work, in this case, use start_session() and $_SESSION to access the cache
}
// in the '/../../../js/epointplus/epointplusevalframe.js
$(document).ready( function() {
$(".EvalFrame").click( function() {
$.ajax({
type : "post",
dataType : "json",
async: false, // Mode : synchrone
url : ajax_object.ajax_url,
data : {
action: 'my_action',
nonce : jQuery(this).attr("data-nonce")
},
})
.fail(function() {
console.log('something went wrong');
//$('#EvalFrame_'+ position).empty();
})
.done(function(data) {
console.log(data);
//$('#EvalFrame_'+position).html(data);
});
再一次,这个网站的帮助被证明是非常有效的。我经常在我认为可以使用全局变量的示例中看到全局$wpdb的使用。我错了。使用Patrick的注释,我修改了代码。现在它工作得很好!非常感谢,我在这个问题上被困了一段时间
function my_action_callback() {
// toujours le meme souci, les variables globales ne fonctionnent pas.
global $wpdb;
if (!session_id()) {session_start();}
//global $wpdb_position;
if (count($_SESSION['criteriasCache']) > 0 )
{
$newCriteria = array_pop($_SESSION['criteriasCache']);
}
//$stmts['getCriteriasposts'][$wpdb_position];
$result['ccount'] = count($_SESSION['criteriasCache']);
$result['criteria'] = displayfromunderlyingsupport($newCriteria,$_POST["position"]);
$result['position'] = $_POST["position"];
//$result['type'] = "success";
//echo displayfromunderlyingsupport($newCriteria,$position);
echo json_encode($result);
die(); // may not work, in this case, use start_session() and $_SESSION to access the cache
}我看不到您使用任何全局javascript变量……,如果您指的是php全局变量之一,它们不会在页面调用之间持久化,请按照您的一条评论中提到的“使用start\u session()和$\u session访问缓存”,尽管start\u session应该已经由wp框架调用。非常感谢。我想知道Ajax中全局变量的范围,但是我认为全局wpdb经常出现在示例中,我假设PHP全局表单模板页面也可以在Ajax回调函数中使用。