AJAX - 未定义的 PHP 变量

AJAX - Undefined PHP variable

提问人:Kokox 提问时间:6/16/2017 最后编辑:CommunityKokox 更新时间:5/28/2018 访问量:2300

问:

我有以下问题,以下脚本发送一个关键字,一个托管在另一个域中的PHP文件(我已经添加了CROS标头),这个PHP返回给我一些(标题,缩略图,网址等)它有效,但随机返回我."echos of different variables""Undefined variables"

第一件事是在 PHP 中向我的变量添加一个,错误不再出现,但我的搜索返回的结果要小得多(在添加它之前平均有 10 到 20 个结果,现在我得到 5 个结果)。if (isset ())

这可能是我的脚本有问题吗?

我的表单.php

<form method="POST" action="" id="form-busqueda">
<input type="text" name="keyword">
<button id="search" name="search">Search</search>
<div id="results"></div>
            <script>
            jQuery(function($){
                var pluginUrl = '<?php echo plugin_dir_url( __FILE__ ); ?>' ;
                $('[id^="form-busqueda"]').on('submit', function(e) {
                    e.preventDefault();
                    $.ajax({
                        type : 'POST',
                        url  : 'http://localhost/ladoserver/script.php',
                        data : $(this).serialize(),
                        beforeSend: function(){
                            $('#results').html('<img src="'+pluginUrl+'../../assets/img/loading.gif" />');
                        }
                    }).done(function(data) {
                        $('#results').html(data);
                    });
                });
            });
        </script>
</form>

我的脚本.php(dlPage是创建cURL连接的函数):

<?php
if (isset($_POST['keyword'])) {
    $search = $_POST['keyword'];
    $html = dlPage("http://example.com/" . $search);
    //where I search and get with simple_html_dom example:
    $video = $videos->find('div.example2>a', 0);
    $title = $video->innertext;
    $url = $video->attr['href'];
    $id = $video->attr['id'];
    $thumbnail = $video->find('div.thumb', 0)->innertext;
    echo $title;
    echo $url;
    echo $id;
    echo $thumbnail[0];
}
?>

我已经更新了我的代码,我没有把所有的代码都放进去,因为我认为它不相关,我的纯PHP工作正常。当我使用AJAX时出现问题。script.php

我收到以下错误:

注意:未定义的变量:第 13 行 C:\xampp\htdocs\webs\ladoserver\script.php 中的标题

注意:未定义的变量:第 13 行 C:\xampp\htdocs\webs\ladoserver\script.php 中的标题

注意:未定义的变量:第 14 行 C:\xampp\htdocs\webs\ladoserver\script.php 中的 url

javascript php jquery ajax 未定义索引

评论

0赞 M. Eriksson 6/16/2017
您需要向我们展示如何在 PHP 文件中定义这些变量,因为这似乎是问题所在。我们需要查看所有相关的代码。
0赞 M. Eriksson 6/16/2017
...如果在使用时结果变小,则仅意味着您没有设置所有变量。isset()
0赞 M. Eriksson 6/16/2017
请阅读: 如何创建一个最小、完整和可验证的示例 以及 我如何提出一个好问题?
0赞 Kokox 6/16/2017
好的,我很生气,我已经用相关信息更新了我的问题。我正在使用 simple_html_dom
1赞 RToyo 6/16/2017
@JorgeAguilar 对不起,我错过了定义$video的部分。 和行为类似,只是 isset 检查是否声明了变量,而 empty 检查是否有分配给该变量的值。您了解为什么使用时结果数量较少吗?另外,出于好奇,您是否尝试过将 $url/$id/$thumbnail 设置为空白值,正如上面 Magnus 建议的那样,就像我在下面的回答中建议的那样?issetemptyisset

答:

1赞 RToyo 6/16/2017 #1

未定义的变量来自您的 PHP 文件 (/ladoserver/script.php)。

什么生成了要返回的变量?最常见的“原因”是只在可能无法执行的代码块中设置变量(例如,在if块中,或在迭代0次的循环中)

您可以通过在脚本顶部定义每个变量来绕过错误(假设您可以接受空白值)。

<?php
$title = "";
$thumbnail = "";
$url = "";
$id = "";
?>

编辑:@snip1377提醒我,您也可以在输出之前在脚本末尾使用。isset

下面是 $thumbnail 变量的一些示例代码,可以将其应用于返回的所有变量

<?php
if (isset($thumbnail))
{
    echo $thumbnail;
}
else
{
    echo "";
}
?>

或者,您可以使用三元运算符

<?php
    echo (isset($thumbnail)) ? $thumbnail : '';
?>

再次编辑:只是为了说明我所说的变量可能不会在脚本中定义的含义,下面是一个可能导致未定义错误的示例:

<?php
if ($_POST['value'] == 1)
{
    // This will never be reached unless $_POST['value'] is exactly 1
    $return_val = 1;
}

echo $return_val;
?>

如果 $_POST['value'] 不是 1,这将给出未定义的警告。

同样,如果 $_POST['value'] 在以下代码中为 0,它也会有未定义的警告:

<?php
for ($i=0; $i<$_POST['value']; $i++)
{
    // This will never be reached if $_POST['value'] is less than 1
    $return_val = $i;
}
echo $return_val;
?>

在上面的示例中,您只需在脚本顶部定义即可,并且不会再出现错误。$return_val

评论

0赞 M. Eriksson 6/16/2017
这是一个评论,而不是问题的真正解决方案,因为我们根本不知道是什么原因导致的(因为 OP 实际上还没有向我们展示这一点)。充其量,这可能有助于缓解症状,但它忽略了原因。
0赞 RToyo 6/16/2017
@MagnusEriksson我可能把它写成评论,但它包括一个解决方案。如果 OP 的脚本存在永远不会设置一个或多个这些变量的情况,这可能是唯一的解决方案。
0赞 M. Eriksson 6/16/2017
这就是我的观点。在尝试解决它之前,我们需要更多的信息。现在,我们都只是在黑暗中捅刀子。
0赞 Omid Reza Heidari 6/16/2017
你只是检查,但我们需要一种方法,而这种方法只是'$_POST['value']'。不需要其他 thigs :)
0赞 RToyo 6/16/2017
@MagnusEriksson 很公平。但这个问题基本上有两个原因:第一个也是最常见的原因是如果变量一开始就没有定义。第二种最常见的情况是,如果定义了变量,则 .我想第三种选择是 OP 引用了错误的变量,但这不太可能,因为有时会返回实际结果。我将其作为答案而不是评论发布,因为 OP 的问题可能是由第一个原因引起的 - 引用尚未定义的变量。unset
0赞 Omid Reza Heidari 6/16/2017 #2

你把这个数据作为后方法发送。你应该回显它们,但你只是回显$_post['name']$name

脚本.php中使用这个:

<?php 
    echo $_POST['title'];
    echo $_POST['thumbnail'];
    echo $_POST['url'];
?>

评论

1赞 M. Eriksson 6/16/2017
由于 OP 实际上确实收到了一些结果,我怀疑他只是想返回发布的变量。(而你的例子缺少's)echo
0赞 Omid Reza Heidari 6/16/2017
Tnx 关于告诉我我的忘记部分 💛
0赞 RToyo 6/16/2017
@snip1377,马格努斯是正确的:你的假设的问题在于,OP有时实际上会得到结果。所以不使用 不是问题,否则 OP 永远不会得到任何结果。$_POST[]
0赞 Omid Reza Heidari 6/16/2017
我认为op应该纠正获取数据的一部分,如果仍然有问题,那么我们会考虑一下
0赞 Kokox 6/16/2017
我已经更新了我的代码,我没有放所有代码,因为我认为这无关紧要,我的脚本 .php 与纯 php 配合得很好。当我使用AJAX时出现问题。