Javascript 全局变量和ajax请求-为什么我的全局变量没有随着i';m使用异步:错误模式?

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数组中的当前位置。当用户单击网格中的某个项目时,我希望将当前帖子替换为数组中要读取的下一个项目,该项目位于网格中的同一位置。 由于显示了四个项目,在单击任何帖子之前

有了这个很棒的网站,我可以学习如何在wordpress中设置ajax请求,但无法使用全局变量。我对wordpress和ajax编程还是新手。 我的问题如下:我查询了在全局$stmts['getCriteriasposts']数组中存储100个wp_帖子,并在网格中显示了前4项$wpdb_position是一个全局变量,给出此stmts数组中的当前位置。当用户单击网格中的某个项目时,我希望将当前帖子替换为数组中要读取的下一个项目,该项目位于网格中的同一位置。 由于显示了四个项目,在单击任何帖子之前,$wpdb_position=4。 但是当我发送Ajax请求以增加全局变量$wpdb_position=0时,即使Ajax请求处于同步模式,并且请求对本地数据有效。我看不出我错在哪里。 任何帮助都会非常有用。 非常感谢

json输出是 对象 位置:“2” wpdb_位置:1

代码如下:

// 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回调函数中使用。