【问题标题】:Error: "Notice: Undefined index:" with Ajax and PHP错误:“注意:未定义的索引:”使用 Ajax 和 PHP
【发布时间】:2013-03-10 00:05:51
【问题描述】:

这是我的 javascript 代码:

$( ".modifica_sore" ).click(function(){
var button = this;
$.ajax({
  type: "POST",
  url: "action/modifica_professori.php",

  data: {               
            nome: $(button).siblings('[name="nome"]').attr("value"),
            cognome: $(button).siblings('[name="cognome"]').attr("value"),
            id: $(button).siblings('[name="id"]').attr("value"),
            modifica_sore: $(button).siblings('[name="modifica_sore"]').attr("value"),
  },
  dataType: "html",

  success: function(msg)
  {
    alert("Aggiunto con successo");
    $("#risultato").html(msg);
  },
  error: function()
  {
    alert("Chiamata fallita, si prega di riprovare...");  callback in caso di fallimento
  }
});
  });

还有我的表格:

echo"<form method='POST'>";
echo"<fieldset>";
echo"<table>";
echo"<tr>";
   echo"<td>Nome</td>";
   echo"<td><input class='nome' name='nome' value='$nome'/></td>";
echo"</tr>";
echo"<tr>";
   echo"<td>Cognome</td>";
   echo"<td><input class='cognome' name='cognome' value='$cognome'/></td>";
echo"</tr>";
echo"<tr>";
   echo"<td></td>";
   echo"<td><input type='hidden' class='id' name='id' value='$id'/></td>";
echo"</tr>";
echo"<tr>";
     echo "<td> <input type='button' name='modifica_sore' class='modifica_sore'  value='Modifica' /> </td>";
    echo "<td> <input type='button' name='modifica_sore' class='modifica_sore' value='Elimina' /> </td>";
echo"</tr>";
echo"</table>";
echo"</fieldset>";
echo"</form>";

如果我不使用 Ajax,它可以工作,但是使用 Ajax 我有这个错误:

Notice: Undefined index: nome in C:\xampp\htdocs\xampp\action\modifica_professori.php on line 8

Notice: Undefined index: cognome in C:\xampp\htdocs\xampp\action\modifica_professori.php on line 9

Notice: Undefined index: id in C:\xampp\htdocs\xampp\action\modifica_professori.php on line 10

Notice: Undefined index: modifica_sore in C:\xampp\htdocs\xampp\action\modifica_professori.php on line 13

Notice: Undefined index: modifica_sore in C:\xampp\htdocs\xampp\action\modifica_professori.php on line 26

在 modifica_professori.php 我使用这些 $_POST var:

$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$id = $_POST['id'];
$_POST['modifica_sore']

但如果它在没有 Ajax 的情况下也能工作,问题出在 javascript... :/ 谢谢您的帮助...

【问题讨论】:

  • print_r($_POST);看看打印出来的内容。

标签: php javascript jquery ajax post


【解决方案1】:

发生这种情况是因为 .modifica_sore 按钮没有名称为 "nome""cognome"&lt;input&gt; 元素作为它们的兄弟元素。要获取 "nome" 的值,您应该使用类似:

$(button).closest("table").find('[name="nome"]').val();

【讨论】:

  • $(button).closest("form").serialize();
  • @Musa True,除此之外,.modifica_sore 元素会有问题。
  • 你也可以使用data : $(this).parents('form').serialize()
  • @zgr024 否。parents 将返回一组进入"form" 选择器的父元素。即使只返回一个元素(因为表单不能嵌套),parents 方法在当前情况下也不是那么有效。
  • @VisioN 虽然它可能不是最佳选择,但它是有效的。他应该在表单上粘贴一个 id 并以这种方式引用它以避免遍历。 data: $('#someFormID').serialize()
【解决方案2】:

.modifica_sore 中没有 siblings(),因此表单元素值未正确提交。

我建议在表单中添加一个id 属性,然后使用如下选择器:

nome: $('#formid input[name="nome"]').attr('value')
cognome: $('#formid input[name="cognome"]').attr('value')
...

在您的 ajax 数据对象中。

编辑:

既然你提到你不能修改表单,也许你可以试着把选择器改成这样:

var form = $(button).parents('form');

...
data: {
  nome: form.find('input[name="nome"]').attr('value'),
  cognome: form.find('input[name="cognome"]').attr('value'),
  ...
},
...

【讨论】:

  • 这不是真的。 .modifica_sore 没有兄弟姐妹。
  • 我不能这样做,因为我的表单是从数据库生成的。我无法添加 ID。
  • @VisioN - 哎呀。你是对的,匹配的选择器被排除在兄弟姐妹()之外。相应地更新了答案。
  • @Aiias 我的意思是,我拥有的不仅仅是同名的表单。 (使用“while”)。
  • @Timuçin Beşken Pawiński - 我更新了我的答案以使用仅考虑当前表单的选择器。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多