我在 Laravel 7 中遇到 ajax 问题

Posted

技术标签:

【中文标题】我在 Laravel 7 中遇到 ajax 问题【英文标题】:I have problems with ajax in Laravel 7 【发布时间】:2021-02-08 09:31:30 【问题描述】:

我有以下用于选择输入的 ajax 代码:

$("#franchise").change(function() 
    //alert( $( "#franchise" ).val() );
    var f = $( "#franchise" ).val();
    $.ajaxSetup(
      headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      
    );
    $.ajax(
      type: 'POST',
      url  : " route('ajax.series') ",
      data : (franchise : f),
      dataType: 'JSON',
      success: function(response) 
        $("#series").html('');
        $("#series").append(response);
      
    );
);

而我也是以下路线:

Route::post('ajax/series', 'AjaxController@series')->name('ajax.series');

我在 AjaxController 中有以下代码:

public function series(Request $request)

    $id = $request->input('franchise');//I get the id data from select input
    $series = Serie::where('franchise_id',$id)->get();
    return view('ajax.series', ['series' => $series]);

但是当我执行选择事件时,什么都没有发生。

我知道change 事件有效,因为我只用alert 检查它,所以问题可能是ajax。有什么问题?

【问题讨论】:

【参考方案1】:
$("#franchise").change(function() 
    //alert( $( "#franchise" ).val() );
    var f = $( "#franchise" ).val();
    $.ajaxSetup(
      headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      
    );
    $.ajax(
      type: 'POST',
      url  : 'ajax/series',
      data : (franchise : f),
      dataType: 'JSON',
      success: function(response) 
        $("#series").html('');
        $("#series").append(response);
      
    );
);

【讨论】:

【参考方案2】:

只需将以下代码移动到文档就绪功能中

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

在你的通用布局文件中添加 csrf_field()

确保您的 js 代码在同一个文件中,而不是外部 js,然后使用下面的 js 代码

$("#franchise").change(function() 
    //alert( $( "#franchise" ).val() );
    var f = $( "#franchise" ).val();
    $.ajax(
      type: 'POST',
      url  : " route('ajax.series') ",
      data : (franchise : f),
      dataType: 'JSON',
      success: function(response) 
        $("#series").html('');
        $("#series").append(response);
      
    );
);

【讨论】:

【参考方案3】:

@sandy 是对的,这肯定会解决您的问题,此外,您还可以在浏览器开发人员工具中检查您的 ajax 调用,以查看这些调用实际上是在调用控制器的方法。

对于 chrome,它的 Ctrl+Shift+I

Click to view Image

调试愉快!

【讨论】:

【参考方案4】:

您的控制器和路由代码非常好,但是您的 javascript 代码在这里有一点问题,在 laravel 中无需为 CSRF 令牌添加 ajax 标头字段,您可以像添加的那样添加 CSRF 令牌作为 ajax 的主体特许经营,代码绝对可以正常工作。

我已经写了代码给你试试看。

    $('#franchise').change(function(e) 
        e.preventDefault();
        $.ajax(
            type: "POST",
            url: " route('ajax.series') ",
            data: 
                franchise: $(this).val(),
                _token: $('meta[name="csrf-token"]').attr('content'),
            ,
            success: function(response) 
                $("#series").html('').append(response);
            
        );
    );

【讨论】:

以上是关于我在 Laravel 7 中遇到 ajax 问题的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery $.ajax 中读取 Laravel JSON 响应

在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题

Laravel 7中的AJAX分页(内部服务器错误)

在 Laravel 中使用 Ajax 将数据插入 MySQL

如何使用ajax将数据从视图发送到控制器laravel?

错误:laravel/VueJS ajax 请求中的 CORS