【问题标题】:Recover Post data from external form in Laravel从 Laravel 的外部表单中恢复 Post 数据
【发布时间】:2018-06-03 21:59:41
【问题描述】:

我的问题如下: 我有一个 HTML 格式的外部表单,我必须使用 AJAX 将数据发送到 Laravel 应用程序。 所以我在客户端创建了一个简单的表单(http://localhost/myLaravelForm):

<form action="http://localhost/laravelApp/public/task/addAjax" id="addNewTask" method="post">
    <label>Add task : </label>
    <input type="text" name="name" id="task-name">
    <button type="submit" id="addTask">Send</button>
</form>

在客户端我创建了一个 AJAX:

$(document).ready(function() {

    $(function () {

       $('addNewTask').on('submit', function () {

            var taskName = $('#task-name').val();
            var csrf_token = '<%= token_value %>';

            $.ajax({
                method: "POST",
                url: "http://localhost/monSuperProjet/public/task/addAjax",
                dataType: "JSON",
                data: {
                    "name": taskName,
                    "token": CSRF_TOKEN
                },
                error: function (data) {
                   //something went wrong with the request
                    alert("Error");
                },
                success: function (data) {
                    console.log (data); 
                }
            });
           event.preventDefault();
        });

现在我在服务器端创建了一个名为 Ajax 的控制器:

class Ajax extends Controller
{
    public function receiveValues(Request $request) {
        var_dump (Task::find($request->input('name')))

    }
}

并创建了一条路线:

Route::post('/task/addAjax','Ajax@receiveValues');

不幸的是,我遇到了可怕的错误.. 我是 Laravel 和 Ajax 的初学者,最常见的是编码。我们了解我们的错误:)) 我试图找出一些答案,但没有成功...... 感谢您的帮助

【问题讨论】:

  • 你能和我们分享一下那些可怕的错误吗?
  • RouteCollection.php 第 218 行中的 MethodNotAllowedHttpException:在 RouteCollection->methodNotAllowed(array('POST')) 中 RouteCollection.php 第 218 行中的 RouteCollection.php 第 205 行中 RouteCollection->getRouteForMethods(object(Request ), array('POST')) 在 RouteCollection.php 第 158 行 RouteCollection->match(object(Request)) 在 Router.php 第 821 行 Router->findRoute(object(Request)) 在 Router.php 第 691 行Router->dispatchToRoute(object(Request)) 在 Router.php 第 675 行中 Router->dispatch(object(Request)) 在 Kernel.php 第 246 行
  • 你在用api吗,整个应用都在laravel里面。
  • 现在我有了这个,因为我在 VerifyCsrfToken.php 第 67 行的 Controller TokenMismatchException 中忘记了一个逗号我们可以这么说......应用程序在 Laravel 中(它只是 laravel 中呈现的基本形式网站)...我在“外部”创建了第二种形式,我将尝试将它集成到 Cordova 中...所以它只需要 HTML、JavaScript 和 Jquery
  • 你必须为 Laravel 提供一个 CSRF 令牌。在 Laravel 刀片模板中,您可以使用 {{ csrf_token() }}。如果那不可能,您需要禁用 VerifyCsrfToken 中间件。

标签: jquery ajax laravel-5 ajaxform


【解决方案1】:

在刀片中使用这种形式:

 <form action="{{ url('/task/addAjax') }}" id="addNewTask" method="post">
        {{ csrf_field() }}
        <input name="_token" type="hidden" id="_token" value="{{ csrf_token() }}" />
        <label>Add task : </label>
        <input type="text" name="name" id="task-name">
        <button type="submit" id="addTask">Send</button>
    </form>

如果您使用表单提交,那么您为什么要做 ajax。如果您对 ajax 感兴趣,请将表单中的 action 值设置为 action="",然后执行您的 ajax。如果你想通过 ajax 来做,那么试试这个(但设置 action=""):

$.ajaxSetup(
        {
          headers:
          {
            'X-CSRF-Token': $('input[name="_token"]').val()
          }
        });
        $.ajax({
          "Your code comes here".
        });

【讨论】:

  • 事实上我没有使用刀片表单......我正在从 Laravel 甚至从另一个主机域提交一个表单......我的外部表单需要与 Laravel 通信,而 Laravel 需要发回结果....感谢您的回答
  • 那你在做任何api调用吗?而不是做 var_dump() 尝试做 return $request->all();看看你得到什么要求。然后你可以进一步简化它。
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 2010-12-16
  • 2017-02-26
  • 2023-04-08
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多