Unnati Patadia
Unnati Patadia

Reputation: 732

How to write url in ajax in laravel?

I want to call storeProduct controller method in ajax URL.

url: './product_catalog/storeProduct'

How to call a method in this URL?

I want to store product_id and campaign id in the database.

Page not found error occurs.

Route :

Route::get('product_catalog','front\ProductCatalogController@showProductCatalogForm');

Route::post('product_catalog',['as' => 'storeProduct', 'uses' => 'front\ProductCatalogController@storeProduct']);

Ajax :

$(".my_form").submit(function(event) {
    event.preventDefault(); //prevent default action 
    var product_id = $(this).find('#product_id').val();
    var campaign_id = $(this).find('#campaign_id').val();
    console.log(product_id);
    console.log(campaign_id);
    $.ajax({
        type: "POST",
        url: './product_catalog/storeProduct',
        data: {
            'product_id': product_id,
            'campaign_id': campaign_id
        },
        success: function(data) {
            alert(data);
            console.log(data);
        }
    });
});

Controller :

public function showProductCatalogForm()
    {
        //if($_GET["campaign"]!=="") 
            $campaign=$_GET["campaign"];

        return view('front.product_catalog');
    }

    public function storeProduct(Request $request)
    {

        $this->validate($request, $this->rules);

        $input=Input::all();
        $campaign_product=ProductCatalog::create($input);
        return redirect('product_catalog');
    }

Upvotes: 1

Views: 33975

Answers (6)

M Shafaei N
M Shafaei N

Reputation: 449

You could use

url:"{{route('route.name')}}"

and it works for me. You could check it by

console.log("{{route('route.name')}}");

inside your script.

Upvotes: 0

m1sylla
m1sylla

Reputation: 91

use this without the dot before slash.

url: '/product_catalog/storeProduct',

Upvotes: 0

narayansharma91
narayansharma91

Reputation: 2353

try this if you have wrote javascript inside blade :

$(".my_form").submit(function(event) {
    event.preventDefault(); //prevent default action 
    var product_id = $(this).find('#product_id').val();
    var campaign_id = $(this).find('#campaign_id').val();
    console.log(product_id);
    console.log(campaign_id);
    $.ajax({
        type: "POST",
        url: '{{route('storeProduct')}}',//this is only changes
        data: {
            'product_id': product_id,
            'campaign_id': campaign_id
        },
        success: function(data) {
            alert(data);
            console.log(data);
        }
    });
});

Upvotes: 0

Rahul
Rahul

Reputation: 1615

your route should be

Route::get('/product_catalog','front\ProductCatalogController@showProductCatalogForm');

your ajax url should be

type: "POST", 
        url: '/product_catalog', 

Or you can use route(); i recommend dont use url() because any time if you want change urls you will need to change it manually.which is not good for app.urls could be 100 or 1000 to change.it could be dangers.

you should try name route like this

Route::get('/product_catalog','front\ProductCatalogController@showProductCatalogForm')->name('product_catalog');

and your ajax url

type: "POST", 
        url: {{ route('product_catalog') }},

Upvotes: 1

Aniketh Saha
Aniketh Saha

Reputation: 919

Why you are adding "." In ./product-catalog ! Just use /product-catalog Use "." when you want to search for folder or any directory or any file in your project directory or any other folder and you are not sure where the file is Dont use in url when there is a route for the link

Upvotes: 0

Sujal Patel
Sujal Patel

Reputation: 2532

  url: {{ url('/product_catalog/storeProduct') }},

Upvotes: 1

Related Questions