【问题标题】:Laravel 5.3 Ajax - Retrieve data sent in the ajax request from the controllerLaravel 5.3 Ajax - 从控制器检索 ajax 请求中发送的数据
【发布时间】:2017-06-23 12:35:16
【问题描述】:

index.html

<form id="my-form">
 <select id="my-select">
  <option value="1">Tom</option>
  <option value="2">Jerry</option>
 </select>
 <input type="submit" value="send data!">
</form>

Controller.php

public function getValue(Request $request)
{
 return User::find($request->input('select_id'));
}

ajax.js

$(function () {

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

var showUser = $('#show-user');

$('#my-form').on('submit', function () {

    var select_id = $('#my-select').val();

    $.ajax({
        method: "POST",
        url: "ajax",
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        data: {
            "select_id": select_id
        },
        error: function (data) {
            //something went wrong with the request
            alert("Error");
        },
        success: function (data) {
            inner = "";
            data.forEach(function (el, i, array) {
                inner += "<div>" + el.name + "</div>";
            });
            showUser.html(inner);
        }
    });
    event.preventDefault();
});

});

web.php

Route::post('ajax','Controller@getValue');

更新:

@Mahdi Youseftabar -> 谢谢,根据文档,我应该使用 input() 来获取请求!

问题一:错误:500 (TokenMismatchException);

我做了什么?

将元数据添加到:

<meta name="csrf-token" content="{{ csrf_token() }}">

我设置了标题:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

    $.ajax({
    ...
        headers: {
            'X-Auth-Token' : token
        },
    ...
    });

我需要做什么?

  • 从控制器获取 ajax 请求中发送的 id [已解决]
  • 通过 ajax 请求验证令牌** 错误 505(问题 1) [已解决]
  • 从控制器返回是空的 [已解决]
  • 将用户输出到&lt;div class="showUser"&gt;&lt;/div&gt; [已解决]

我的项目的 Github 文档: (多对多关系 - Laravel 5.3,Ajax) https://github.com/39ro/StudentSchoolProject

【问题讨论】:

  • 那么,问题出在哪里?有什么不工作吗?您是否在某处遇到错误?
  • 我认为在 ajax 请求中你已经添加了这样的值:data: { userid: userid }
  • 你试过我的方法了吗/?
  • 是的,但我仍然收到 500 错误。我更新了 ajax.js 和 index.html 代码来解释我目前想要实现的目标!
  • 您是否尝试过检查您的 VerifyCsrfToken.php 文件?我建议在答案中进行类似的尝试,如下所示:laracasts.com/discuss/channels/general-discussion/…

标签: php jquery ajax laravel


【解决方案1】:

你的问题在路线上:

Route:post('ajax','Controller@getValue');

您在 jQuery 中使用 post 方法,但在路由中您定义该路由方法 'get' ...

在这种情况下,当您使用 ajax 请求时,laravel 会响应您一个空响应

另一个问题是从请求中获取你的 user_id,你应该在你的控制器中使用它:

return User::find($request->input('user_id');

【讨论】:

  • 这里写错了,ajax调用的类型已经用“post”进行了!感谢您的建议,但 value_select 仍然为空!
  • 我发现的另一个问题...检查一下
【解决方案2】:

两件事检查

在js中

data: {"userid" : userid}
method: "POST",

在控制器中

$value_select =  User::where($request->userid)->first();
return $value_select;

现在检查响应并告诉我它是否有效

【讨论】:

    【解决方案3】:

    如果您没有收到错误,并且结果为 null,那么您可能遗漏了一些东西。

    请记住,您在控制器中使用的 find() 函数仅搜索主键。

    它是一个 ajax 请求,所以您不会在浏览器中看到它。要查看返回值,您应该查看

    开发者工具>网络>然后找到请求查看 预览和回复

    【讨论】:

      【解决方案4】:

      添加与Controller.php的关系

      我的问题是与其他两个表的关系。 我用我的 GitHub 项目的链接更新了我的主要问题,我在其中应用了你的所有建议!谢谢大家,我解决了!

      对于我解决的令牌,添加了我在 Ajax.js 中显示的内容。

      为了从我刚刚创建的关系中检索数据:

      public function getValue(Request $request)
      {
      return User::find($request->input('select_id'))->relationship_table;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 2016-05-17
        • 1970-01-01
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 2017-03-11
        • 2020-01-11
        • 1970-01-01
        相关资源
        最近更新 更多