【问题标题】:post ajax data with click a link on laravel 5通过单击 laravel 5 上的链接发布 ajax 数据
【发布时间】:2015-12-20 14:27:29
【问题描述】:

我是 ajax 和 laravel 5 的新手

我在点击链接时遇到了一些关于传递数据的问题,我会解释一下我想要实现的目标。

这里是我的 html 代码:

//this is the div that i want append with data foreach
<div id="warung-plain">
</div>

//and those code is links that when i click it will send ajax data
@foreach($kategoriwarung_all as $kategoriwarung)
    <li style="padding:5px 0px">
        <a class="kategori-warung" style="text-decoration:none;color:#5ca4a9" href="#">
           {{ $kategoriwarung->nama }}
        </a>
    </li>
 @endforeach

//this is a html code that i want plain in id="warung-plain" after get the foreach data
<div class="row" style="margin:3% 0px 0px 0px" id="">
@foreach($warung_has_kategoriwarungs[$category_fix] as $Warung)
    <div class="col-md-6" style="margin-bottom:0px;min-height:100px">
        <ul class="no-padding" style="display:inline-flex;list-style-type: none;width:100%;">
            <li>
                <img class="img-circle" src="assets/gambar_contoh/foto.jpg" style="height:60px;width:60px">
            </li>
            <li style="padding:0px 0px 0px 15px ;width:100%">
                <p class="heading-toko-font" style="font-size:18px;color:#606060">{{ $Warung->Warung->nama  }}</p>
                <span class="alamat-toko-font" style="font-size:14px;color:#BCBCBC"><?php echo $Warung['Warung']['alamat']; ?></span>
            </li>
        </ul>       
    </div>
@endforeach                        
</div>   

这是我的 js

<script>
    $(document).ready(function(){
        $(".kategori-warung").click(function(e){ 
            e.preventDefault();
            var category = $(e.target).text();

            jQuery.ajax({
                type: "POST",
                //after passing data category then system will append 
                //html code to id="warung-plain"
                url: "/ambil_kategori/{category}",
                data: {category: category},
                success: function(res) {
                    $('#warung-plain').load("/warung_plain/{category}");
                }
            });   
            $(".warung").fadeIn("slow").show();
            $("#nama-kategori").html(category);
            $(".warung-semua").hide();  
        });
    });
</script>

这是我的控制器:

public function index()
{   
    $Warungs_all = Warung::paginate(10);
    $kategoriwarung_all = kategoriwarung::all();


    return view('index' , compact('kategoriwarung_all' , 'Warungs_all' ));
}


public function get_warung_by_category($category){

    $category_fix = $category;
    $kategoriwarung_all = kategoriwarung::all();

    foreach($kategoriwarung_all as $kategoriwarung){
        $kategoriwarung->nama;
        $kategoriwarung->id;
        $warung_has_kategoriwarungs[$kategoriwarung->nama] = warung_has_kategoriwarung::where('kategoriwarung_id' , '=' , $kategoriwarung->id)->with(['Warung','kategoriwarung'])->paginate(10);
    }

    return view('daftar_warung' , compact('warung_has_kategoriwarungs' ,'category_fix'));
}

public function warung_plain($category , IndexController $objek){
    $objek->get_warung_by_category($category);
}

最后这是我的路线:

Route::get('/', 'IndexController@index');
Route::post('/ambil_kategori/{category}',    'IndexController@get_warung_by_category');
Route::get('/warung_plain/{category}', 'IndexController@warung_plain');

【问题讨论】:

  • 你还没有解释问题是什么?您是看到异常还是它不起作用?
  • 它只是不起作用,也许我在 laravel 5 中使用路由时出错了,但我不知道为什么
  • 问题是我点击链接后 div id="warung-plain" 仍然为空。
  • 好的,所以你需要检查你的控制台 (F12) 和 Laravel 日志看看发生了什么
  • 好吧,伙计,它说“POST localhost/ambil_kategori/%7Bcategory%7D 404(未找到)”,是的,我知道那是错误的,但我不知道在 laravel 中填充 ajax url 的正确方法-_-

标签: php jquery html ajax laravel-5


【解决方案1】:

因为您正在发帖,所以我认为您需要一个令牌。

您可以在此处阅读有关 csrf-x-csrf-token 的文档。

总结您需要:

// insert a meta tag to generate a tocken
<meta name="csrf-token" content="{{ csrf_token() }}">

// use the tocken in the header http request
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

在您的代码中是:

jQuery.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': {{ csrf_token() }}
    }
}).ajax({
    type: "POST",
    //after passing data category then system will append 
    //html code to id="warung-plain"
    url: "/ambil_kategori/{category}",
    data: {category: category},
    success: function(res) {
        $('#warung-plain').load("/warung_plain/{category}");
    }
});

请注意,blade 的语法 {category} 是错误的,如果你有一个变量,它应该像 {{ $category }},如果它只是一个字符串,它应该像 category

【讨论】:

    【解决方案2】:

    这里有很多错误。您正在使用 post,但实际上并没有创建新的资源项。其次,您的 warung_plain 函数不返回任何内容?你应该对这条路线做一个get

    /ambil_kategori/{category}
    

    此外,在您的 JS 中,您没有针对正确的 url 进行发布。您应该发布到(如果出于某种原因您想这样做):

    '/ambil_kategori/'+category
    

    建议你重新阅读 L5 文档

    【讨论】:

    • 如果我使用 laravel 5 路由,我不知道在 ajax 中编写正确 url 的正确方法
    猜你喜欢
    • 2015-03-25
    • 2016-06-04
    • 2010-11-05
    • 2018-06-16
    • 2017-01-17
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多