通过ajax发送的请求在控制器中为空,结果为
为foreach()提供的参数无效
大多数请求都是在没有问题的情况下提交的,并且具有请求中预期的数据。该错误似乎是随机,即使复制了错误接收的用户输入,我们也无法重现错误。
从PHP 7.0更新Laravel Forge到PHP 7.1后出现问题。一旦我们注意到错误,我们将其降级为PHP 7.0,但错误仍然存在。
简化表单HTML
<form>
<label>First name:</label>
<input type="text" name="firstname">
<label>Last name:</label>
<input type="text" name="lastname">
</form>
的Javascript
var signatureImageUrl = $("#jSignature").get(0).toDataURL();
$.ajax({
method: "POST",
url: "submit",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
data: {
"visit_data": $("form").serializeArray()
}
});
public function submit(Request $request) {
try {
foreach ($request->input('visit_data') as $index => $visitComponent) {
// Iterates over data
}
} catch (\ErrorException $e) {
// Handles error
}
}
为什么提交ajax请求时请求会随机变空?
答案 0 :(得分:1)
当问题发生时,无法查看客户端的开发人员工具/控制台,几乎不可能回答这个问题。你可以做一些事情,这样用户就不会在屏幕上看到一些奇怪的错误:
if(!empty($request->input('visit_data')) {
foreach ($request->input('visit_data') as $index => $visitComponent) {
// Iterates over data
}
}
期望发送一个数组和一个空字符串。你应该在处理之前测试空虚:
if(isset($request->input('visit_data')) && !empty($request->input('visit_data')) {
foreach ($request->input('visit_data') as $index => $visitComponent) {
// Iterates over data
}
}
如果AJAX调用发送空请求,您可以添加额外的检查以确保变量已设置且不为空:
UPDATE table SET points=IF(age>20,15,10)