Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Wordpress中将jQueryAjax传递给PHP之后,如何在用于其他函数之前更新全局变量(而不使用async=false)?_Php_Jquery_Ajax_Wordpress_Global Variables - Fatal编程技术网

在Wordpress中将jQueryAjax传递给PHP之后,如何在用于其他函数之前更新全局变量(而不使用async=false)?

在Wordpress中将jQueryAjax传递给PHP之后,如何在用于其他函数之前更新全局变量(而不使用async=false)?,php,jquery,ajax,wordpress,global-variables,Php,Jquery,Ajax,Wordpress,Global Variables,第一次过帐到StackOverflow。(感谢您帮助我融入社区) 尽管我对编码基本上是新手,但我还是能够在Wordpress中完成以下步骤,这要感谢Zac Gordon在他概述的步骤之后提供的非常有用的视频和演示文件: 通过wp_本地化_脚本传递Nonce和ajaxurl 在JavaScript中使用Nonce和URL进行AJAX调用 将PHP AJAX函数挂钩到Wordpress AJAX挂钩中 使用JavaScript处理AJAX响应 虽然我能够使用AJAX响应返回预期结果(可以打印到控制台

第一次过帐到StackOverflow。(感谢您帮助我融入社区)

尽管我对编码基本上是新手,但我还是能够在Wordpress中完成以下步骤,这要感谢Zac Gordon在他概述的步骤之后提供的非常有用的视频和演示文件:

  • 通过wp_本地化_脚本传递Nonce和ajaxurl
  • 在JavaScript中使用Nonce和URL进行AJAX调用
  • 将PHP AJAX函数挂钩到Wordpress AJAX挂钩中
  • 使用JavaScript处理AJAX响应
  • 虽然我能够使用AJAX响应返回预期结果(可以打印到控制台),并且现在能够检索要传递给另一个函数的值,但我无法在传递给其他函数之前更新该值。

    根据其他StackOverflow对话()我认为这可能是异步与同步AJAX调用的问题。然而,我进一步了解到,应该不惜一切代价避免设置“async:false”,而且在这一点上似乎是不赞成的(并且在我尝试时没有帮助),因此我正在尝试找到将此变量从一个函数传递到另一个函数的正确方法。我读到的答案并不是针对Wordpress的,这让我无法自己解决问题

    目标相当简单:使用AJAX获取$(window).height(),存储为变量,将变量传递到PHP中的另一个函数中,该函数转换该变量并调整地图插件的高度(hook:storymap\u heights

    对于初学者:我目前只是想让它在初始页面加载时起作用,但我也很好奇是否可以在每次调整浏览器窗口大小时重新运行这些功能?

    下面的代码让我很接近:我必须刷新全局变量$heights{和/或“get_option('jsforwp_heights')”}两次,以更新并正确设置“new”浏览器窗口大小(因此它似乎在存储变量,但至少要在之前运行一次)。代码当前存储在Wordpress Snippets插件中,但其工作原理应与放在Functions.php中的相同:

    <?PHP
    
    global $heights;
    if ( null == $heights  ) {
      add_option( 'jsforwp_heights', 100 );
    }
    $heights = get_option( 'jsforwp_heights' );
    
    function my_theme_scripts() {
        wp_enqueue_script( 'my-great-script', get_template_directory_uri() . '/assets/js/my-great-script.js', array( 'jquery' ), '1.12.4', true );
        wp_localize_script(
            'my-great-script',
            'jsforwp_globals',
            [
                'ajax_url' => admin_url('admin-ajax.php'),
                'total_heights' => get_option('jsforwp_heights'),
                'nonce' => wp_create_nonce('nonce_name')
            ]
        );
    }
    add_action( 'wp_enqueue_scripts', 'my_theme_scripts' );
    
    function screen_height_is(){
        check_ajax_referer('nonce_name');
        global $heights;
        $heights = $_POST['height'];
        update_option('jsforwp_heights',$heights);
    //  set_map_height($heights);  //test
        $response['success'] = true;
        $response['height'] = $heights;     
        $response = json_encode($response);
        echo $response;
        wp_die();
    }
    
    add_action('wp_ajax_screen_height_is','screen_height_is',1);
    add_action( 'wp_ajax_nopriv_screen_height_is', 'screen_height_is',1 );
    
    function set_map_height(){
                global $heights;
                $testA = get_option('jsforwp_heights');  
                $testB = "px";
                $height = $testA. $testB;
                echo $height;
                return $height; 
                }
    add_filter('storymaps_heights','set_map_height',10);    
    
    //tests for function above
      //function set_map_height($heights){ 
      //$testA = '300'; //static option
      //$testA = $heights; //works with same loading delay problem
      //$testA = $response['height']; //doesn't work even if $response set as global
        
    
    控制台日志打印:

    {身高:“598”,成功:真的}

    完整的

    我有点不清楚是否/如何修改成功回调以实现我的总体目标?或者是否需要修改wp\u enqueue\u script()依赖项

    如果这有帮助,PHP中的以下过滤器将挂接到storymaps-core.PHP文件中:

    以下wp\u排队\u脚本驻留的位置:

    function storymap_external_resources() {
        wp_enqueue_style( 'storymap-stylesheet', 'https://cdn.knightlab.com/libs/storymapjs/latest/css/storymap.css' );
        wp_enqueue_script( 'storymap-javascript', 'https://cdn.knightlab.com/libs/storymapjs/latest/js/storymap-min.js', array(), '1.0.0', false );
    }
    add_action( 'wp_enqueue_scripts', 'storymap_external_resources' ); 
    

    非常感谢任何关于下一步尝试的帮助

    尝试使用console.log或JSON.stringify(response)@KevinP:console.log(函数(response){console.log(response);回调当前已返回:{height:“615”,success:true}。然后,如果我收缩高度并重新加载页面,它将返回:{height:“507”,success:true}。因此,这会正确地传递到函数屏幕上。\u height_is()$heights=$\u POST['height']。但是在函数集加载到页面之前,不会更新它。Re:JSON.stringify(response),您是指“出错”警报吗?我尝试更改为if('success'==JSON.stringify(response)):但是运气不好。我修改了原来的帖子,将if('success'==response){替换为if(response['success']==true){以进入“出错”警报,并删除了我问题中与此部分相关的最后一部分。
    add_filter('storymaps_heights','set_map_height',10);
    
    function storymap_external_resources() {
        wp_enqueue_style( 'storymap-stylesheet', 'https://cdn.knightlab.com/libs/storymapjs/latest/css/storymap.css' );
        wp_enqueue_script( 'storymap-javascript', 'https://cdn.knightlab.com/libs/storymapjs/latest/js/storymap-min.js', array(), '1.0.0', false );
    }
    add_action( 'wp_enqueue_scripts', 'storymap_external_resources' );