从jQuery向PHP文件发送数据时未定义的索引

时间:2015-05-26 04:12:48

标签: javascript php jquery ajax

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

当我点击链接然后我需要将它发送到将执行数据库查询的php文件时,我使用jQuery获取id HTML'a'属性值。我尝试使用$.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}
            });

        });
});

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

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

我做错了什么?

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

对此有何想法?

4 个答案:

答案 0 :(得分:0)

更改此

      $.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:对不起,我还不能回答。

答案 1 :(得分:0)

POST方法可以像

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

答案 2 :(得分:0)

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

尝试var_dump($_POST)查看您是否正在获取任何POST数据

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

编辑:包含您请求中的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应该有效。

答案 3 :(得分:0)

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

我正在与Twig合作制作模板,而我所做的就是忘记jQuery,并在$_GET中使用$_POST而不是showElement.php,因为我是' m不发送敏感数据(密码或用户名),我只是附加

?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)