简体   繁体   中英

Ajax data is not being sent to controller function (Laravel)

I am sending the id of dom element as ajax data to laravel controller but Request object is empty on the controller side. I have returned the custom array to ajax to check if controller function working and it's returning the response to ajax success.

Other functions on the same controller getting the Request data from ajax but not this function. I don't get any error so it's difficult to debug the issue

My Ajax call

$(document).on('click', 'i[id^="delete"]', function () {

        var alias_id = $(this).prop('id');
        //console.log(alias_id);

        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: "{{ route('deletealiasname') }}",
            method: "post",
            data: {'alias_id': alias_id},
            dataType: "json",
            contentType: false,
            cache: false,
            processData: false,
            beforeSend : function()
            {
                console.log(alias_id);
            },
            success: function (response) {
                console.log(response);
            }
        });
    });

Route:

Route::post('/deletealiasname', 'API\UserProfileController@deleteAliasName')->name('deletealiasname');

Controller:

public function deleteAliasName(Request $request)
{
    $var = $request->all();
    return array($var);
}

Output of dd($request)

    POST http://127.0.0.1:8000/api/deletealiasname
----------------------------------------------

 ------------ ----------------------------------------------------
  date         Thu, 06 Jun 2019 17:52:53 +0000
  controller   "UserProfileController"
  source       UserProfileController.php on line 165
  file         app\Http\Controllers\API\UserProfileController.php
 ------------ ----------------------------------------------------

Illuminate\Http\Request {#43
  #json: null
  #convertedFiles: null
  #userResolver: Closure($guard = null) {#282
    class: "Illuminate\Auth\AuthServiceProvider"
    this: Illuminate\Auth\AuthServiceProvider {#40 …}
    parameters: {
      $guard: {
        default: null
      }
    }
    use: {
      $app: Illuminate\Foundation\Application {#2 …}
    }
    file: "C:\project\newglit\myglit\vendor\laravel\framework\src\Illuminate\Auth\AuthServiceProvider.php"
    line: "83 to 85"
  }
  #routeResolver: Closure() {#284
    class: "Illuminate\Routing\Router"
    this: Illuminate\Routing\Router {#26 …}
    use: {
      $route: Illuminate\Routing\Route {#221 …}
    }
    file: "C:\project\newglit\myglit\vendor\laravel\framework\src\Illuminate\Routing\Router.php"
    line: "650 to 652"
  }
  +attributes: Symfony\Component\HttpFoundation\ParameterBag {#45
    #parameters: []
  }
  +request: Symfony\Component\HttpFoundation\ParameterBag {#44
    #parameters: []
  }
  +query: Symfony\Component\HttpFoundation\ParameterBag {#51
    #parameters: []
  }
  +server: Symfony\Component\HttpFoundation\ServerBag {#47
    #parameters: array:29 [
      "DOCUMENT_ROOT" => "C:\project\newglit\myglit\public"
      "REMOTE_ADDR" => "127.0.0.1"
      "REMOTE_PORT" => "56590"
      "SERVER_SOFTWARE" => "PHP 7.1.29 Development Server"
      "SERVER_PROTOCOL" => "HTTP/1.1"
      "SERVER_NAME" => "127.0.0.1"
      "SERVER_PORT" => "8000"
      "REQUEST_URI" => "/api/deletealiasname"
      "REQUEST_METHOD" => "POST"
      "SCRIPT_NAME" => "/index.php"
      "SCRIPT_FILENAME" => "C:\project\newglit\myglit\public\index.php"
      "PATH_INFO" => "/api/deletealiasname"
      "PHP_SELF" => "/index.php/api/deletealiasname"
      "HTTP_HOST" => "127.0.0.1:8000"
      "HTTP_CONNECTION" => "keep-alive"
      "CONTENT_LENGTH" => "15"
      "HTTP_CONTENT_LENGTH" => "15"
      "HTTP_ACCEPT" => "application/json, text/javascript, */*; q=0.01"
      "HTTP_ORIGIN" => "http://127.0.0.1:8000"
      "HTTP_X_REQUESTED_WITH" => "XMLHttpRequest"
      "HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safar
i/537.36"
      "CONTENT_TYPE" => "text/plain;charset=UTF-8"
      "HTTP_CONTENT_TYPE" => "text/plain;charset=UTF-8"
      "HTTP_REFERER" => "http://127.0.0.1:8000/user/profile/"
      "HTTP_ACCEPT_ENCODING" => "gzip, deflate, br"
      "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.9,nb;q=0.8"
      "HTTP_COOKIE" => "XSRF-TOKEN=eyJpdiI6IkdPR0NtcGNXdEJxKzVwZERheEZSMlE9PSIsInZhbHVlIjoiXC9EbHBHSXM2U0c1TzdjUHhOT25BZ1RQeXdzd3l0WGFw
bmNhWWduakJFRU9ubVBcL3pJdzJMcTI1SCtqQnR4Sk05IiwibWFjIjoiYjk4Mzk3M2ZiOGJlOGZkOGNmYjk1NjBjZGQzNTY3YzIzOWUwNzliNDdjNjNhMzRhODZkOThmZGI2NzU
3MDc2OCJ9; laravel_session=eyJpdiI6IktNaHlnY29BZnI3VUlEcHpnUU1vU2c9PSIsInZhbHVlIjoiUkxWTkVWdHlLcEZGY0FDOXAxMWdaNHROa2szSUY3ZlhWRm94V2ox
ZWZSYlc4SDdcL3FSdUlVNGZ0YkFreHl4VHQiLCJtYWMiOiJlOGQ0MjYwZTRiN2ZkOTQwYWRmNTcxNjYyNTY0YmYyZjY5MjBkN2E3ZWMxZGM3YWViYzQ4ODcxYzUyZTg0MTE3In0
%3D"
      "REQUEST_TIME_FLOAT" => 1559843573.3443
      "REQUEST_TIME" => 1559843573
    ]
  }
  +files: Symfony\Component\HttpFoundation\FileBag {#48
    #parameters: []
  }
  +cookies: Symfony\Component\HttpFoundation\ParameterBag {#46
    #parameters: array:2 [
      "XSRF-TOKEN" => "eyJpdiI6IkdPR0NtcGNXdEJxKzVwZERheEZSMlE9PSIsInZhbHVlIjoiXC9EbHBHSXM2U0c1TzdjUHhOT25BZ1RQeXdzd3l0WGFwbmNhWWduakJF
RU9ubVBcL3pJdzJMcTI1SCtqQnR4Sk05IiwibWFjIjoiYjk4Mzk3M2ZiOGJlOGZkOGNmYjk1NjBjZGQzNTY3YzIzOWUwNzliNDdjNjNhMzRhODZkOThmZGI2NzU3MDc2OCJ9"
      "laravel_session" => "eyJpdiI6IktNaHlnY29BZnI3VUlEcHpnUU1vU2c9PSIsInZhbHVlIjoiUkxWTkVWdHlLcEZGY0FDOXAxMWdaNHROa2szSUY3ZlhWRm94V2o
xZWZSYlc4SDdcL3FSdUlVNGZ0YkFreHl4VHQiLCJtYWMiOiJlOGQ0MjYwZTRiN2ZkOTQwYWRmNTcxNjYyNTY0YmYyZjY5MjBkN2E3ZWMxZGM3YWViYzQ4ODcxYzUyZTg0MTE3In
0="
    ]
  }
  +headers: Symfony\Component\HttpFoundation\HeaderBag {#49
    #headers: array:12 [
      "host" => array:1 [
        0 => "127.0.0.1:8000"
      ]
      "connection" => array:1 [
        0 => "keep-alive"
      ]
      "content-length" => array:1 [
        0 => "15"
      ]
      "accept" => array:1 [
        0 => "application/json, text/javascript, */*; q=0.01"
      ]
      "origin" => array:1 [
        0 => "http://127.0.0.1:8000"
      ]
      "x-requested-with" => array:1 [
        0 => "XMLHttpRequest"
      ]
      "user-agent" => array:1 [
        0 => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
      ]
      "content-type" => array:1 [
        0 => "text/plain;charset=UTF-8"
      ]
      "referer" => array:1 [
        0 => "http://127.0.0.1:8000/user/profile/"
      ]
      "accept-encoding" => array:1 [
        0 => "gzip, deflate, br"
      ]
      "accept-language" => array:1 [
        0 => "en-US,en;q=0.9,nb;q=0.8"
      ]
      "cookie" => array:1 [
        0 => "XSRF-TOKEN=eyJpdiI6IkdPR0NtcGNXdEJxKzVwZERheEZSMlE9PSIsInZhbHVlIjoiXC9EbHBHSXM2U0c1TzdjUHhOT25BZ1RQeXdzd3l0WGFwbmNhWWduak
JFRU9ubVBcL3pJdzJMcTI1SCtqQnR4Sk05IiwibWFjIjoiYjk4Mzk3M2ZiOGJlOGZkOGNmYjk1NjBjZGQzNTY3YzIzOWUwNzliNDdjNjNhMzRhODZkOThmZGI2NzU3MDc2OCJ9;
 laravel_session=eyJpdiI6IktNaHlnY29BZnI3VUlEcHpnUU1vU2c9PSIsInZhbHVlIjoiUkxWTkVWdHlLcEZGY0FDOXAxMWdaNHROa2szSUY3ZlhWRm94V2oxZWZSYlc4SD
dcL3FSdUlVNGZ0YkFreHl4VHQiLCJtYWMiOiJlOGQ0MjYwZTRiN2ZkOTQwYWRmNTcxNjYyNTY0YmYyZjY5MjBkN2E3ZWMxZGM3YWViYzQ4ODcxYzUyZTg0MTE3In0%3D"
      ]
    ]
    #cacheControl: []
  }
  #content: null
  #languages: null
  #charsets: null
  #encodings: null
  #acceptableContentTypes: null
  #pathInfo: "/api/deletealiasname"
  #requestUri: "/api/deletealiasname"
  #baseUrl: ""
  #basePath: null
  #method: "POST"
  #format: null
  #session: null
  #locale: null
  #defaultLocale: "en"
  -isHostValid: true
  -isForwardedValid: true
  basePath: ""
  format: "html"
}

i guess the issue is with method:"post"

because it's not method object, It's actually a type .

type:"post"

Try this one

$.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: "{{ route('deletealiasname') }}",
            type: "post",
            data: {'alias_id': alias_id},
            dataType: "json",
            contentType: false,
            cache: false,
            processData: false,
            beforeSend : function()
            {
                console.log(alias_id);
            },
            success: function (response) {
                console.log(response);
            }
        });

ANd as you said you are using laravel 5.8 . so you can start your dump server in terminal for debug. jsut hit command in terminal php artisan dump-server and dd(#request)

and see data is coming or not.

am sure its issue is with method:"post" just change it with type:"post"

I haven't understood why it's happening but found a way to send data through ajax. I simply added a form element and appended my data to FormData and sent it as ajax data.

Form element

<form id="deleteAliasName" class="ui form" action="{{ route('deletealiasname') }}" method="post">
</form>

Ajax

var alias_id = $(this).attr('data-id');
        formData = new FormData($('#deleteAliasName')[0]);
        formData.append('alias_id', alias_id);

        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: "{{ route('deletealiasname') }}",
            type: "post",
            data: formData,
            dataType: "json",
            contentType: false,
            cache: false,
            processData: false,
            success: function (response) {
                console.log(response);
            }
        });

Now I receiving the data in controller request

I won't mark it as accepted answer because I think it's a workaround.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM