AJAX调用中缺少POST参数会导致PHP脚本中出现未定义的索引警告


Missing POST parameters in AJAX call result in undefined index warnings in PHP script

我第一次使用AJAX,所以我写了一个代码,并遵循了一个教程,但当我试图用AJAX发送我的帖子时,我得到了未定义的索引,我真的不知道为什么,我试图搜索答案,但由于我是第一次使用AJAX和javascript,那里的代码没有告诉我任何信息。这是我的代码,如果有任何帮助,我将不胜感激。

js方法

function post() {
    var name = $('meno').val();
    var priez = $('priezvisko').val();
    $.post( "aktualizuj.php", {
        'meno': name,
        'priezvisko': priez
    },
        function (data) {
        $('#result').html(data);
    }
        );
}

html表单…

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript" src="prihlasenie.js"></script>
</head>
<body>
<form>
    <label for="meno" >Meno:</label><input type ="text" name="meno" id="meno" value ="meno" ><br>
    <label for="priezvisko" >Priezvisko:</label><input type ="text" id="priezvisko" name="priezvisko" value ="priezvisko" ><br>
<input type="button" value="ulozZmeny"  onclick="post()" >
</form>
<div id="result"></div>
</body>
</html>

这是我应该从ajax/javascript 获得的

session_start();
require "pripojenie.php";

    $meno = $_POST['meno'];
    $priezvisko = $_POST["priezvisko"];
    $login = $_SESSION['login'];

jquery不序列化值未定义的键:值对,即

$.post(url, { foo:undefined });

导致jquery不发送任何POST参数。

问题是由于以下线路,

var name = $('meno').val();
var priez = $('priezvisko').val();

这将查找元素meno元件priezvisko(然后是它们的值),就好像您有一个类似的文档一样

<p>
  <meno>...</meno>
  <priezvisko>...</priezvisko>
</p>

但是,您正在寻找以meno/priezvisko作为其id属性值的元素:

var name = $('#meno').val();
var priez = $('#priezvisko').val();

不过,您应该检查php脚本中是否存在参数。没有什么可以阻止另一个脚本/bot/用户使用不同的参数或根本没有参数调用您的脚本
另请参阅:

  • http://docs.php.net/isset
  • http://docs.php.net/filter