通过AJAX将数组发送到PHP时出现未定义的索引错误

时间:2015-02-19 20:48:25

标签: javascript php ajax

我已尝试修复类似的问题,但没有任何对我有用。

按下提交按钮时,尝试通过AJAX将数组发送到PHP。

在PHP文件中我收到错误 - 注意:未定义索引:数据

HTML

 <form id="email-form" action="add-user.php" method="post">
       ...
 </form>

的Javascript

var frm = $('#email-form');
frm.submit(function (ev) {
var cars = ["Saab", "Volvo", "BMW"]; //this is the array i want to send for purposes of this question
var jsonString = JSON.stringify(cars);
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: {'data': jsonString},
        success: function () {
            alert('ok');
        }
    });
});

PHP(add-user.php)

$data = json_decode(stripslashes($_POST['data']));

foreach($data as $d){
echo $d;
}

在尝试数据时获取相同的错误:{data:jsonString}

console.log(jsonString)向我展示了数组,所以我知道它存在。

有关导致未定义索引错误的原因的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:2)

提交表单时,会触发提交事件。这会触发正常的Ajax请求。然后提交功能完成运行,表单提交。

浏览器离开当前页面,并丢弃包含等待响应Ajax请求的事件处理程序的执行环境。

服务器端脚本接收普通表单数据,但表单没有数据字段,因此您得到未定义的索引错误。

您需要阻止正常的表单提交:

ev.preventDefault();

还要确保JS失败时服务器端代码可以处理表单中实际的字段。