0

I want to toggle publish stat of my exams in laravel, I created a route for toggling and it worked, but I don't want to refresh the page every time I send a POST request so I created this function to send,

function togglePublish(id){
    let token = {{ csrf_token() }};
    $.ajax({
        type: "post",
        url: `{{ route('togglePublish','${id}') }}`,
        data: `_token=${token}`
    });
}

I meant by this after the laravel compile the page, the URL will be https://localhost/toggle/${id} then javascript change the id variable to 1 for example, so the link be https://localhost/toggle/1 and that will work, but laravel returned

Missing required parameter for [Route: togglePublish] [URI: a/togglePublish/{exam}] [Missing parameter: id].

I think I have to add @csrf

the route

Route::post('/a/togglePublish/{exam:id}', [AdminExamController::class, 'togglePublish'])->name('togglePublish');

the togglePublish function in AdminExamController controller

public function togglePublish(Exam $exam)
{
    dd($exam);
}
Sarout
  • 821
  • 4
  • 25
  • 2
    you cannot change `id` dynamically, because `route()` renders url in server by laravel, and your js code executes in client (browser). BTW, if you insist on doing this, there is a library named [ziggy](https://github.com/tighten/ziggy) which may help you. – SEYED BABAK ASHRAFI Jan 31 '22 at 10:28
  • 1
    You Can Try This -> {{ url('/a/togglePublish/'.${id}) }} – vivek vaghela Jan 31 '22 at 10:37
  • 1
    thank you so much, it worked and I've also modified it, I added the answer – Sarout Jan 31 '22 at 11:08

1 Answers1

1

in plus of what @vivekVaghela said, I've changed my ajax to

function togglePublish(id){
        let token = '@csrf';
        token = token.substr(42, 40);
        $.ajax({
            type: "post",
            url: `{{ url('/a/togglePublish/'.'${id}') }}`,
            data: `_token=${token}`,
            error: function(err) {
                console.log( $($(err.responseText)[1]).text() )
                debugger;
            }
        });
    }

EDIT: to use ajax you have to use the uncompressed script tag, as below

  1. JQuery Official website: Click me

  2. Select the version that you need (The latest stable version is recommended) and click on the uncompressed button enter image description here enter image description here Copy the script on the dialog box and past it on your code: enter image description here enter image description here


res
TypeError: $.ajax(...) is not a function?

Sarout
  • 821
  • 4
  • 25