$ _POST返回空

时间:2012-05-06 00:50:30

标签: php javascript html ajax

尝试练习ajax和PHP一点,我无法弄清楚为什么每当我发送内容时,它都会返回空或未定义的索引。

PHP:

<?php

    if (!empty($_POST['message'])) {
        echo 'works';
    } else {
       echo 'empty';
    }

?>

返回空。

JS:

$('form').submit(function(){

    var meth = $(this).attr('action');

    var msg = $('.msg');
    $.post(meth, function(data) {
        $('.messages').append(data);
    }) ;

    return false; 
}); 

HTML:

<form class="send" action="process.php" method="post">
    <textarea type="text" name="message" class="msg" value="blah"></textarea>
    <input type="submit" name="submit" class="submit">
</form>

如果我只是做'echo 'test';在process.php文件中,它有效;否则为未定义的索引。

我做错了什么?

4 个答案:

答案 0 :(得分:4)

我看到您已编辑语法错误,因此您可以忽略此部分:

在我的头脑中,我看到两个语法错误,一个在php中:

<?php


  if (!empty($_POST['message'])) {
    echo 'works';
  } else [ // <- This should be a {
     echo 'empty';
  }

?>

和JS中的一个:

$('form').submit(function(){

      var meth = $(this).attr('action');

      var msg = $('.msg');
      $.post(meth, function(data) {

        $('.messages').append(data);

      }) // <- Should be a ; here

      return false; 
    });

另外,让我首先指出您应该正确缩进代码。否则很难看到范围的深度,只会让你的代码变得不可读。

empty是用于检查是否设置了数组索引的错误函数。那是什么产生了未定义的索引&#34;警告。请改用issetarray_key_exists

if (!isset($_POST['message'])) {
// or
if (!array_key_exists('message', $_POST)) {

empty函数只检查变量是否包含一个计算为空的值,例如空字符串,空数组,NULL等。它不检查是否设置了变量。


此外,您不需要通过填充value属性来设置textarea的值。那不会奏效。您可以通过将值放在open和close标记之间来设置值,如下所示:

<textarea class="msg">My message</textarea>

然后通过请求值

来获取文本(在jQuery中)
var my_message = $('textarea.msg').val()

答案 1 :(得分:3)

测试此方法的最佳方法是回显发送的数据:

<?php
  if (isset($_POST['message'])) {
    echo $_POST['message'];
  }
?>

如果你使用prop()获得action属性,它通常会获得绝对链接,这是更好的IMO。

$('form').on('submit', function(e){
    e.preventDefault();
    var meth = $(this).prop('action'),
        Mymsg = $('.msg').text(); //assuming the element contains text
    $.post(meth, {message: Mymsg}, function(data) {
        $('.messages').append(data);
    });
});

要发送整个表单使用序列化,我想添加它,但请参阅Jonathan的答案。

答案 2 :(得分:2)

由于您没有使用默认行为,您必须自己传递表单字段的名称和值,以便PHP接收其中任何一个:

// ...
$.post(meth, $(this).serialize(), function(data) {
// ...

您还可以考虑使用array_key_exists来避免undefined错误:

if (array_key_exists('message', $_POST)) {
    # ...
}

答案 3 :(得分:0)

尝试将文本区域的值放在<textarea></textarea>标记之间,如下所示:

<textarea type="text" name="message" class="msg">blah</textarea>

Textarea的功能与典型的<input />字段不同。