【问题标题】:What is missing in my ajax post request that fails to return a 200 response?我无法返回 200 响应的 ajax 发布请求中缺少什么?
【发布时间】:2021-11-19 06:49:34
【问题描述】:

谁能告诉我我的 ajax 请求中缺少什么?我最初认为它是 _token 但我仍然没有得到 200 响应。也许这是我的函数中缺少的参数?下面是我基于 Laravel 构建的代码。

查看.blade.php

callback: function (result) {
            if(result == true){
                $('#common_loader').show();
                $.ajax({
                    method:'POST',
                    data: {'offer_id': offer_id,'_token':'{{ Session::token() }}'},
                    cache: false,
                    url: "{{url('/chooseArtist')}}",
                     success: function (data) {
                        $('#common_loader').hide();
                        var rep = JSON.parse(data);
                        if (rep.status == 200) {
                            bootbox.alert(rep.response);
                        /// code continues. 

路线

Route::post('/chooseArtist', [ProjectController::class, 'chooseArtist']);

控制器功能

public function chooseArtist() {
$data["status"] = 200;
echo json_encode($data);
                die;
}

【问题讨论】:

  • 你试过在控制台打印data吗?检查你到底在data里面得到了什么
  • 在 Web 开发者控制台中,您能看到正在发布的请求吗?
  • 使用 Web 开发者控制台时,我收到以下错误:Status 500 Internal Server Error Version HTTP/1.1 Transferred18.25 KB (17.16 KB size) Referrer Policy strict-origin-when-cross-origin

标签: php jquery ajax laravel-8


【解决方案1】:

我认为你不能在更新版本的 Laravel 中包含 CSRF 令牌吗?将其包含在页面的元标记中:

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

然后在调用 Ajax 之前将其合并到您的脚本中:

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

另外,在前端,您尝试引导警报“rep.response”,但在后端,您的响应仅包含状态,不包含其他任何内容。此外,您应该返回结果,而不是回显它。

$data = array();
$data['status'] = 200;
$data['response'] = "Jimi Hendrix";
return (json_encode($response));

【讨论】:

    【解决方案2】:

    Laravel 在数据属性中发布请求 csrf 令牌。

    试试这个解决方案:

    callback: function (result) {
       if(result == true){
    
            var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
    
                    $('#common_loader').show();
                    $.ajax({
                        method:'POST',
                        data: {_token: CSRF_TOKEN,'offer_id': offer_id,'_token':'{{Session::token() }}'},
                        cache: false,
                        url: "{{url('/chooseArtist')}}",
                         success: function (data) {
                            $('#common_loader').hide();
                            var rep = JSON.parse(data);
                            if (rep.status == 200) {
                                bootbox.alert(rep.response);
                            /// code continues. 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      相关资源
      最近更新 更多