【问题标题】:Undefined index when sending data to PHP file from jQuery从 jQuery 向 PHP 文件发送数据时未定义的索引
【发布时间】:2015-08-07 13:59:51
【问题描述】:

我已经研究过这个问题(我阅读了很多 StackOverflow 问题),但我仍然无法找到解决方案。

当我单击链接时,我使用 jQuery 获取 id HTML 'a' 属性值,然后我需要将其发送到将执行数据库查询的 php 文件。我尝试使用 $.ajax 和 $.post jQuery 函数,我得到了同样的错误。

与$.post

var idElement;
$(document).ready(function(){
  $('.linkElement').click(function(){
      idElement= $(this).attr('id');
      console.log(idElement); // Shows id value on console
      $.post("showElement.php", idElement).done(function (){
         alert("All went good"); 
      });
      $(document.body).load("showElement.php");         
  });
});

与$.ajax

var idElement;
    $(document).ready(function(){
        $('.linkElement').click(function(){
          idElement= $(this).attr('id');
          console.log(idElement); // Shows id value on console
          $.post("showElement.php", idElement).done(function (){
             alert("All went good"); 
          });

            $.ajax({
              url: "showElement.php",  
              type: "POST",
              data: {'idElement':idElement}
            });

        });
});

当我在 showElement.php 文件中使用 $_POST['idElement'] 时,我得到以下信息:

Notice: Undefined index: idElement in C:\xampp\htdocs\path\to\showElement.php on line 28

我做错了什么?

编辑:我用 Firebug 对此进行了测试,它说没问题。 Firebug 控制台中显示的数据正确显示,但 PHP 文件未显示在浏览器中(var_dump 返回应具有的值)。

对此有什么想法吗?

【问题讨论】:

  • 代替method:"POST",使用type:"POST"
  • 感谢您的回复。我就像你说的那样,在 jQuery 网站上搜索后,我注意到它可能应该是“方法”而不是“类型”,所以我改变了它。如果我将其保留为“类型”,则不会显示 showElement.php。有什么我应该知道的吗?
  • 在您的showElement.php 中尝试回显$_POST['idElement']
  • 也可以使用PHP 代码编辑您的帖子

标签: javascript php jquery ajax


【解决方案1】:

改变这个

      $.post("showElement.php", idElement).done(function (){
         alert("All went good"); 
      });

为此

         $.post("showElement.php", {'idElement': idElement}).done(function (){
         alert("All went good"); 
      });

您忘记在“数据”参数中添加密钥。而且我认为您可能仅在使用 $.post 时才会看到这一点,因为 $.ajax 是正确的。评论 $.ajax 并尝试我的建议或评论 $.post 并尝试 $.ajax。

这里有一个例子 http://www.tutorialspoint.com/jquery/ajax-jquery-post.htm

PS : 抱歉,我还不能作为评论回复。

【讨论】:

  • 谢谢埃里克。我按照您的建议做了,但不幸的是,我仍然遇到同样的错误。我不知道发生了什么...也许是我加载 showElement.php 文件的方式... $(document.body).load("verPregunta.php");那应该通过其他方式完成吗?
  • 你是如何访问你的 php 文件的?我认为您正在通过浏览器直接访问该文件。如果萤火虫报告没问题,那就意味着我要告诉你的。我尝试了您的代码,但这两个都没有打印从文件返回的内容。所以基本上你在做什么,我认为,你是用javascript代码运行你的文件,然后你在两个不同的选项卡中浏览你的php文件(更清楚)。我说的对吗?
  • 我的意图是在当前选项卡中打开 .php 文件。该 .php 文件执行数据库查询并显示数据(所有数据都在同一个文件中)。我找到了解决方案。我会发布它的答案部分矮个子:)
【解决方案2】:

我不认为你做错了什么。而不是尝试使用一些key 来获取数据,

尝试var_dump($_POST) 看看您是否收到任何POST 数据

注意: 尝试在您的ajax 请求中设置datatype

编辑:在您的请求中包含contentType。看看下面

  $.ajax({
          url: "showElement.php",  
          type: "POST",
          contentType:"application/x-www-form-urlencoded",
          dataType: 'html', //or json whatever data that you return from server side
          data: {'idElement':idElement}
        });

我认为设置contentType 应该可以。

【讨论】:

  • 它返回 array(0) { },我没有收到任何 POST 数据,当然...任何想法或替代方案?
  • 您检查控制台是否有任何语法错误?你也试过设置数据类型吗?
  • 是的,我收到一条警告说:主线程上的同步 XMLHttpRequest 已被弃用,因为它对最终用户的体验产生不利影响。我研究了警告/错误和link,但仍然是同样的事情......
  • 好的,您是否尝试在其中一种解决方案中给出的 ajax 请求中明确放置“async: true”,可能是 async 参数设置为 false 并且未发送异步请求跨度>
  • 是的,我做到了。并且 showElement.php 文件根本没有显示...如果我想出什么我会告诉你的。
【解决方案3】:

POST 方法可以像这样使用

$.post("showElement.php", 
{idElement: idElement},
 function (result) {
   alert("All went good"); 
});

【讨论】:

    【解决方案4】:

    嗯,正如我在评论中所说,我遇到了一个不使用 JavaScript 的解决方案。

    我正在使用 Twig 作为模板,我所做的是忘记 jQuery 并在 showElement.php 中使用 $_GET 而不是 $_POST,因为我不发送敏感数据(密码或用户名)和我刚刚添加了

    ?idElement=anyElementId
    

    到 showElement.php 的路径,例如,获取以下 URI:

    http://localhost/Project/showElement.php?idElement=1
    

    在我的 showElement.php 中:

    $anElement= ElementQuery::create()->findPk($_GET['idElement']); // Retrieve and element with Propel
    $_SESSION['element'] = $anElement; // Save the element in $_SESSION['element'] variable
    

    为了显示信息,我显示了我的 showElement.twig 模板:

    $twig->display("showElement.twig", array('element') => $_SESSION['element']); // Display Twig template and pass arguments in an array
    

    在我的 Twig 模板 (showElement.twig) 中

    <!-- Link to be clicked -->
        <a id="{{element.getId}}" class="linkElement" href="./../Project/showElement.php?idElement={{element.getId}}">{{element.getTitle}}</a>
    

    这只是一种解决方案。我不知道这是否是一个好方法,但它确实有效。 我想我可以直接将对象保存在数组中,避免为此使用 $_SESSION 变量,但是我这样做是为了以防我需要在其他 PHP 文件中使用检索到的元素。

    如果有人找到其他解决方案,可以在这里发布。

    感谢大家的帮助:)

    编辑链接到对我有帮助的线程:Ajax send the data, but php doesn't recieve(标题描述了我用 Firebug 发现的内容:P)

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 2018-02-22
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多