为啥提交ajax请求时请求随机为空?
Posted
技术标签:
【中文标题】为啥提交ajax请求时请求随机为空?【英文标题】:Why is the requests randomly empty when submitting an ajax request?为什么提交ajax请求时请求随机为空? 【发布时间】:2018-08-29 09:35:59 【问题描述】:问题
通过 ajax 发送的请求在控制器中为空,导致
为 foreach() 提供的参数无效
提交的大多数请求都没有问题,并且包含请求中预期的数据。该错误看似随机发生,即使复制收到错误的用户的输入,我们也无法重现该错误。
在将 Laravel Forge 从 php 7.0 更新到 PHP 7.1 后开始出现问题。一旦我们注意到错误,我们就降级到 PHP 7.0,但错误仍然存在。
我们所知道的
之间似乎没有关系 浏览器 浏览器版本 用户输入 请求通过 ajax 提交 控制器顶部的请求中没有数据通过 ajax 发送数据的相关代码
简化的 html 格式
<form>
<label>First name:</label>
<input type="text" name="firstname">
<label>Last name:</label>
<input type="text" name="lastname">
</form>
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请求时请求随机为空?
【问题讨论】:
鉴于问题,您需要尝试复制问题,直到它发生,您可以从浏览器的开发人员工具中收集更多信息。 (Cross-posted to Reddit). 【参考方案1】:如果问题发生时无法查看客户的开发人员工具/控制台,几乎不可能回答问题。您可以做一些事情,这样用户就不会在他们的屏幕上看到一些奇怪的错误:
foreach()
需要一个数组并且正在发送一个空字符串。您应该在处理之前测试空虚:
if(!empty($request->input('visit_data'))
foreach ($request->input('visit_data') as $index => $visitComponent)
// Iterates over data
如果 AJAX 调用发送空请求,您可以添加额外检查以确保变量已设置且不为空:
if(isset($request->input('visit_data')) && !empty($request->input('visit_data'))
foreach ($request->input('visit_data') as $index => $visitComponent)
// Iterates over data
【讨论】:
当提交方法接收到非空请求时,$request->input('visit_data')
被迭代,没有问题。尽管没有解决遇到的问题,但您提出了一个有效的观点。
另外,foreach()
不应该收到空字符串。如果未填充 visit_data
,则存在超出问题范围的 JS 验证会阻止 ajax 调用触发。
但是你说AJAX发送的是一个空请求?那么变量根本不存在@cody?
我们不确定这是 JS 还是 PHP 中的错误,但最终结果是控制器收到了一个空请求,希望这有助于澄清。当request
被打印出来时,它是一个空数组。
也引用原帖错误似乎是随机发生的,即使复制收到错误的用户的输入,我们也无法重现该错误。。根本问题是这个以上是关于为啥提交ajax请求时请求随机为空?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 POST 不支持字符集,但 AJAX 请求可以?雄猫 6
为啥用ajax发送post请求时,需要设置请求头类型为application/x-www-form-urlencoded