如何在WordPress AJAX中定义变量?

时间:2016-09-14 作者:sdexp

我有一个插件可以正常工作,所以前几天我打开调试模式时有点震惊。第一个通知告诉我wp\\u localize\\u脚本中的变量未定义。下面是我的代码,我在网上看到的所有示例都是类似的。我还没有看到任何明确的定义。

wp_localize_script(\'wwww_loader\', \'wwww_vars\', array(
\'ajaxurl\' => admin_url(\'admin-ajax.php\'),
\'whichcats\' => $whichcats,
\'whichtags\' => $whichtags,
\'ajax_nonce\' => wp_create_nonce(\'ww-ww-ww\'), ));
所以,是“whichcats”和“whichtags”。有什么想法吗?

EDIT

AJAX工作正常,正确的信息通过AJAX传递。当我调试时,它会在wp\\u localize\\u脚本中显示这些变量的“注意事项”。所以,我认为任何事情都是错误的唯一原因是因为调试通知,例如。。。

注意:wp内容/插件/ww ww ww ww/ww ww ww ww ww。php:212-未定义变量:whichcats require\\u once(\'wp-admin/admin header.php\')、do\\u action(\'admin\\u enqueue\\u scripts\')、call\\u user\\u func\\u array、wwwww\\u load\\u all\\u admin\\u scripts

jquery看起来是这样的(并且工作正常)。。。

$(".wwww_catselect").submit(function(e) {
    // Serialize the form data
    var wwww_checkboxdata = $(this).serialize();

    var data = {
        action : "wwww_select_cats",
        whichcats : wwww_checkboxdata,
        security : wwww_vars.ajax_nonce,
    };

    $.post(ajaxurl, data, function(response) {
        $(\'#wwww_ajax_lists\').html(response);
    });
    return false;
});
它的行为正是它应该做的,所以我应该忽略这些通知吗?或者有没有办法修复代码,使调试中的通知不再存在?

1 个回复
最合适的回答,由SO网友:Mikhail 整理而成

如果您的意思是,当您仅按名称访问JS代码中的变量时,它们在JavaScript环境中实际上是未定义的。为了访问JS中的变量,您需要像示例中那样键入www_vars.whichcats而不仅仅是whichcats

此外,了解wp\\u localize\\u脚本的工作原理也很好。

第一个参数是之前用声明的js文件句柄wp_enquee_scriptwp_register_script (在你的情况下是这样的wwww_loader). 它说应该在什么时候触发,因为当某些js文件插入到特定页面时,您确实只需要这些数据。

第二个参数是全局变量的名称,它将存储通过第三个参数传递给JS的所有数据—关联数据数组。

它将在包含handle中的脚本时创建内联JS脚本。这个内联JS将使用您作为第二个参数传入的名称在变量中初始化这些数据。

所以,首先检查您是否在第一个参数中指定了正确的脚本句柄。并检查之前是否已将此脚本排队。例如:

wp_enqueue_script( \'wwww_loader\', plugins_url( \'/js/wwww_loader.js\', __FILE__ ), array( \'jquery\' ) );然后,您可以将所需的数据添加到它的js执行上下文中。

wp_localize_script(\'wwww_loader\', \'wwww_vars\', array( \'ajaxurl\' => admin_url(\'admin-ajax.php\'), \'whichcats\' => $whichcats, \'whichtags\' => $whichtags, \'ajax_nonce\' => wp_create_nonce(\'ww-ww-ww\'), ) );

最后,您可以检查您是否真的在浏览器中将这些数据传递给了JS,例如在Chrome open developer控制台hit F12中,并在控制台中键入您的变量名wwww_vars 然后按enter键。如果您的脚本链接正确,您将在开发人员控制台输出中将它们视为对象,否则它将显示给您undefined如果它能显示它的值,那么一切都正常,您可以在JS文件中引用这些数据,如wwww_vars.whichtags

编辑:看起来您将$whichtags和$whichcats变量传递给函数,但它们之前在PHP中没有定义。如果是,请在调用之前初始化它们wp_localize_script 使用一些默认值,0或false或array()或“”emtpy字符串,这些字符串将在wp\\u本地化脚本之前填充数据时描述您的数据,例如:

$whichtags=\'\'; $whichcats=\'\'; wp_localize_script(\'wwww_loader\', \'wwww_vars\', array( \'ajaxurl\' => admin_url(\'admin-ajax.php\'), \'whichcats\' => $whichcats, \'whichtags\' => $whichtags, \'ajax_nonce\' => wp_create_nonce(\'ww-ww-ww\'), ) );

相关推荐