【问题标题】:Laravel and AJAX doesn't return anythingLaravel 和 AJAX 不返回任何内容
【发布时间】:2017-04-30 01:37:20
【问题描述】:

我想使用.ajax() 从我的数据库中返回数据,但它会在页面的整个 HTML 中抛出一个错误。为什么要这样做?

我的.ajax() 电话:

$.ajax({
    url: '{{ URL('reports/groupsUsersGet') }}',
    dataType: "json",
    data: {
        group_id : $('#group').val(),
    },
    success: function(data) {
        alert(data);
    },
    error: function (data) {
        console.log('Error:', data);
    }
});

路线

Route::get('reports/groupsUsersGet',
    array(
        'as' =>'groupsUsersGet',
        'uses' => 'ReportsController@groupsUsersGet'
    )
);

视图(表单)

{{ Form::select('grup',$group,null,['class'=>'form-control','id'=>'group']) }}

控制器

$term = Input::get('group_id');
$results = array();
DB::table('users')->where('group', 'LIKE', '%'.$term.'%')->get();

foreach ($queries as $query) {
    $results[] = [
        'id' => $query->id,
        'value' => $query->nick
    ];
}

return Response::json($results);

【问题讨论】:

  • 错误是什么?你期待什么?
  • $query 来自哪里?你能具体说明一下吗?
  • 使用 try 和 catch 并告诉您遇到的确切错误
  • 错误返回 200 并且状态正常。

标签: php jquery ajax laravel laravel-5


【解决方案1】:

还将csrf_token() 作为数据发送。

 $.ajax({
        url: '{{ URL('reports/groupsUsersGet') }}',
        dataType: "json",
        data: {
         _token: <?php echo csrf_token();?>,
          group_id : $('#group').val(),
        },
        success: function(data) {
          alert(data);
        },
        error: function (data) {
          console.log('Error:', data);
        }
      });

【讨论】:

  • groupsUsersGet:1061 Uncaught ReferenceError: XREXnSgsYpN3kJwjXGPguiJYZf6XIYxQa7YsYgDz is not defined(...) 当我抛出没有它的令牌部分时,ajax 错误给出状态:200 和状态正常(这意味着它通过了)。
  • ya XREXnSgsYpN3kJwjXGPguiJYZf6XIYxQa7YsYgDz 这个是发送的token的值。取组id的值即可。
  • Route 必须发帖。
  • GET 请求中不需要令牌。并且路线可以因不同的目的而不同。
【解决方案2】:

在我看来,您没有像@HikmatSijapati 指定的那样在请求中发送 CSRF 令牌。在 ajax 请求中,您可以像这样传递 csrf 令牌:

例如,您可以将令牌存储在 HTML 元标记中:

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

然后,一旦您创建了元标记,您就可以指示 jQuery 之类的库自动将标记添加到所有请求标头中。这为基于 AJAX 的应用程序提供了简单、方便的 CSRF 保护:

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

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    试试这个:

    在您的控制器中,您不能在方法中定义 $queries 变量。

    ajax 调用

    $.ajax({
        url: "{{ URL('reports/groupsUsersGet') }}",
        method: 'GET',
        dataType: "json",        
        data: {
            group_id : $('#group').val(),
        },
        success: function(data) {
            alert(data);
        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
    

    控制器

    $term = Input::get('group_id');
    $results = array();
    $queries = DB::table('users')->where('group', 'LIKE', '%'.$term.'%')->get();
    
    foreach ($queries as $query) {
        $results[] = [
            'id' => $query->id,
            'value' => $query->nick
        ];
    }
    
    return Response::json(['results' => $results], 200);
    

    【讨论】:

      【解决方案4】:

      感谢大家的帮助,但错误在于我不包括控制器顶部的使用响应。当我这样做时,它起作用了。

      【讨论】:

        猜你喜欢
        • 2016-10-26
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 2013-06-21
        相关资源
        最近更新 更多