【问题标题】:Laravel form submission randomly stops workingLaravel 表单提交随机停止工作
【发布时间】:2016-08-23 15:51:28
【问题描述】:

我的 laravel 应用程序目前有一个奇怪的问题。在随机点,我的表单提交将停止处理我的所有表单。我签入 Chrome 开发人员工具并关注网络活动,它似乎正确地完成了所有操作,但没有提交我的表单,它似乎只是刷新了页面。如果我故意犯了验证错误,它们不会显示在任何地方。如果一切正确,它只会重新加载表单为空。它只发生在表单上,​​我的 Ajax 请求有效。

在我将应用程序的实时版本上传到我正在开发的服务器供人们使用之后,我第一次遇到这种情况。第二天回来,发现一切正常,无需我进行任何更改。

现在又发生了,这次是在我唯一使用的开发版本上。我的任何表单都不会提交,而是刷新页面。我绝对无法弄清楚是什么原因造成的,以及为什么它似乎会随机发生并自行解决,这让我发疯了,因为在它执行此操作时我几乎无能为力。

有没有人发生过类似的事情可以帮助我解决这个问题,或者有谁知道为什么会发生这种情况?

这是我的一个请求中的一些代码,我在其中进行验证:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class JobRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'project_name' => 'required',
            'end_date' => 'required|date|after:yesterday',
            'end_time' => array('required', 'regex:/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/'),
            'delivery_date' => 'required|date|after:yesterday',
            'delivery_time' => array('required', 'regex:/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/'),
            'advisor.0'  => 'min:1',
            'advisor.1'  => 'different:advisor.0',
            'job_type' => 'min:1',
            'text_other_job_type' => 'required_if:other_job_type,1',
            'project_desc' => 'required',
            'name_client' => 'required'

        ];
    }
}

这是我的表单打开和提交按钮的示例:

{!! Form::open(['action' => ['JobController@store'], 'id' => 'add_project', 'method' => 'post', 'name' => 'add_project', 'files'=>true])!!}
    <input type="hidden" name="edit_job" value=0>
            @include('pages.job.form', ['isEdit' => false])
            <div class="">
            <div class="col-sm-offset-3 col-sm-7 btn_group">
                <button type="submit" class="btn btn-default arrow_link_right" value="store" name="store">{{ trans('add_job.submit') }}<span ></span></button>
                <button type="submit" class="btn btn-default" onclick="add_project.action='{{URL::route('storeTemplate')}}'; return true;" value="template" name="templateSub" formnovalidate>{{ trans('add_job.saveTemplate') }}</button>
                <button type="button" class="btn btn-default" onclick="reset_form('add_project');" >{{ trans('add_job.reset') }}</button>
            </div>
        </div>
        {!! Form::close()!!}

【问题讨论】:

  • 你使用 CSRF 令牌吗?
  • 我没有使用 Laravel 的经验,并且您没有提供任何代码或您尝试过的内容(您应该这样做),但我建议您查看正在提交的数据。可能是存在无效信息,所以整个提交都被忽略了。
  • 哪个版本的 Laravel?您可以发布您的验证码吗?
  • @Mantas 是的,我使用 CSRF 令牌和 laravel 的默认检查
  • @jhmckimm 我认为发布代码没有用,因为它发生在所有表单上,即使是那些已经工作了很长时间并且我有一段时间没有进行任何更改的表单。每当我尝试提交任何有效或无效的数据时,都会发生这种情况

标签: php forms laravel server


【解决方案1】:
  1. 当您的应用程序处于调试模式时,详细的错误消息 堆栈跟踪将显示在您内部发生的每个错误上 应用。如果禁用,则会显示一个简单的通用错误页面。 GO -config/app.php 第 29 行

    'debug' => env('APP_DEBUG', enable),

这将有助于查看浏览器上发生的代码。

确保在 routes.php 上添加 POST 路由

Route::post('url','JobController@store');

检查你的 Ajax 帖子是否正常

$.ajax({
    type: "POST",
    url: 'url',
    data: {data}
    success: function( data ) {

    }
});

有时会发生,发布数据时缺少令牌。在每个 ajax 调用上添加令牌,其中包含正在发布的数据

 data: {'_token': $('input[name=_token]').val(),other data},

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多