【问题标题】: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> 

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请求时请求随机为空?

【问题讨论】:

  • 鉴于问题,您需要尝试复制问题,直到它发生,您可以从浏览器的开发人员工具中收集更多信息。

标签: php ajax laravel-forge


【解决方案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-&gt;input('visit_data') 被迭代,没有问题。尽管没有解决遇到的问题,但您提出了一个有效的观点。
  • 另外,foreach() 不应该收到空字符串。如果未填充 visit_data,则存在超出问题范围的 JS 验证会阻止 ajax 调用触发。
  • 但是你说AJAX发送的是一个空请求?那么变量根本不存在@cody?
  • 我们不确定这是 JS 还是 PHP 中的错误,但最终结果是控制器收到了一个空请求,希望这有助于澄清。当request 被打印出来时,它是一个空数组。
  • 也引用原帖错误似乎是随机发生的,即使复制收到错误的用户的输入,我们也无法重现该错误。。根本问题是这个
猜你喜欢
  • 2017-02-22
  • 2016-08-28
  • 2023-04-06
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多