在AJAX调用中添加url参数引起了PHP的注意

在AJAX调用中添加url参数引起了PHP的注意,php,ajax,wordpress,Php,Ajax,Wordpress,我让AJAX在我的网站上加载更多的代码,这会拉取最新的帖子并将它们附加到列表的底部。此代码还与一些附加URL参数一起使用,用于自定义筛选器“?筛选器id=”和Wordpress搜索“?s=” 我可以使用AJAX获得这些附加参数的唯一方法是将它们添加到本地化脚本中的AJAX wp admin url中,如下所示: 'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php?s='.$_GET["s"].'&

我让AJAX在我的网站上加载更多的代码,这会拉取最新的帖子并将它们附加到列表的底部。此代码还与一些附加URL参数一起使用,用于自定义筛选器“?筛选器id=”和Wordpress搜索“?s=”

我可以使用AJAX获得这些附加参数的唯一方法是将它们添加到本地化脚本中的AJAX wp admin url中,如下所示:

       'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php?s='.$_GET["s"].'&filter-id='.$_GET["filter-id"].'', // WordPress AJAX
   ) );
$queryParameters = [];

if (isset($_GET['s'])) {
    $queryParameters['s'] = $_GET['s'];
}

if (isset($_GET['filter-id'])) {
    $queryParameters['filter-id'] = $_GET['filter-id'];
}
$url = sprintf(
    '%s/wp-admin/admin-ajax.php?%s',
    site_url(),
    http_build_query($queryParameters)
);
这样,AJAX在搜索结果和应用过滤器时都能正确运行。然而,这段代码也抛出了一个PHP通知:


如何修复此问题?

这意味着您的$\u GET数组中没有这些键。所以 您应该在使用这些值之前准备它们 要做到这一点,请将它们添加到上面的某个位置,并检查是否存在。 比如说,

///if those values can be empty, in your case that would be:

if (!isset($_GET[{YOUR_INDEX_HERE}]){
  $_GET[{YOUR_INDEX_HERE}]=''; 
}

之所以出现此通知,是因为$\u GET数组不包含您试图访问的元素和筛选器id

作为解决方案,我建议首先收集所有可能的查询参数,如下所示:

       'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php?s='.$_GET["s"].'&filter-id='.$_GET["filter-id"].'', // WordPress AJAX
   ) );
$queryParameters = [];

if (isset($_GET['s'])) {
    $queryParameters['s'] = $_GET['s'];
}

if (isset($_GET['filter-id'])) {
    $queryParameters['filter-id'] = $_GET['filter-id'];
}
$url = sprintf(
    '%s/wp-admin/admin-ajax.php?%s',
    site_url(),
    http_build_query($queryParameters)
);
然后,您可以在以后构建URL,如下所示:

       'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php?s='.$_GET["s"].'&filter-id='.$_GET["filter-id"].'', // WordPress AJAX
   ) );
$queryParameters = [];

if (isset($_GET['s'])) {
    $queryParameters['s'] = $_GET['s'];
}

if (isset($_GET['filter-id'])) {
    $queryParameters['filter-id'] = $_GET['filter-id'];
}
$url = sprintf(
    '%s/wp-admin/admin-ajax.php?%s',
    site_url(),
    http_build_query($queryParameters)
);
最后在AJAX调用中使用它:

'ajaxurl' => $url,

如果以后想添加更多参数或进行某种验证,那么将其拆分会使其更具可读性,从而更易于扩展。

谢谢,@会做什么?这个答案只是建议隐藏错误并假装它不存在。如果代码以后依赖于这些变量,那么这可能会导致其他问题,而且还会使调试代码变得更加困难。隐藏错误是一种反模式。修复这些错误会更加合理这不是一个错误,但是请注意未定义的索引。用于无论如何都将隐藏的生产,但用于显示任何未定义索引的开发。使用这种方法,它将更快地工作,而不是注册所有潜在的和不需要的变量。或者,在这部分代码之前,应该使用许多条件对其进行预定义。好像!isset$_GET['s']{//show some error here}等等对于ADyson指出的每个潜在指数,这个答案说明了一种不好的做法,应该避免。你在这里解决不了任何问题