我已尝试修复类似的问题,但没有任何对我有用。
按下提交按钮时,尝试通过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)向我展示了数组,所以我知道它存在。
有关导致未定义索引错误的原因的任何想法?提前谢谢。
答案 0 :(得分:2)
提交表单时,会触发提交事件。这会触发正常的Ajax请求。然后提交功能完成运行,表单提交。
浏览器离开当前页面,并丢弃包含等待响应Ajax请求的事件处理程序的执行环境。
服务器端脚本接收普通表单数据,但表单没有数据字段,因此您得到未定义的索引错误。
您需要阻止正常的表单提交:
ev.preventDefault();
还要确保JS失败时服务器端代码可以处理表单中实际的字段。