Laravel 5.3 Ajax - 从控制器

时间:2017-02-06 14:19:58

标签: php jquery ajax laravel

的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 - &gt;谢谢你,根据文档,我应该使用input()来获取请求!

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

我做了什么?

将meta添加到:

<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) [已解决]
  • 从控制器返回为空 [求助]
  • 将用户输出到<div class="showUser"></div> [已解决]

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

4 个答案:

答案 0 :(得分:1)

你的问题在路上:

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

你在jQuery中使用post方法但是在路由中你定义了路由方法'get'...

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

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

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

答案 1 :(得分:0)

检查两件事

在js

data: {"userid" : userid}
method: "POST",
控制器中的

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

现在检查回复并告诉我它是否有效

答案 2 :(得分:0)

如果您没有收到错误,结果为null,那么您可能会遗漏某些内容。

  

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

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

中查看
  

开发人员工具&gt;网络&gt;然后找到要查看的请求   预览和回复

答案 3 :(得分:0)

添加与Controller.php的关系

我的问题是与另外两张桌子的关系。 我用我的GitHub项目的链接更新了我的主要问题,我在那里应用了你的所有建议!谢谢大家,我解决了!

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

要从关系中检索数据,我就这样做了:

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