簡體   English   中英

Ajax 分頁 Laravel 5.1

[英]Ajax Pagination Laravel 5.1

我正在嘗試使用 ajax 和 laravel 5 進行分頁,但即使使用簡單的測試,我也無法執行 ajax 工作:

$(document).on('ready',function(){
$('.pager a').on('click', function (e) {
var page = $(this).attr('href').split('page=')[1];
         e.preventDefault();
            $.ajax({
          type: "GET",
          url: 'testeserver.php',
         //url:"raphael.dev/testeserver.php",
         dataType: 'json', // Notice! JSONP <-- P (lowercase)
         success:function(json){

             alert("Success"+json);
         },
         error:function(){
             alert("Error");
         }      
      });
    });
});

在這個例子中,我嘗試在 json 上有一個回報,

  <?php
$arr = array("element1","element2",array("element31","element32"));
$arr['name'] = "response";
echo $_GET['callback']."(".json_encode($arr).");";
?>

但只有錯誤警報,實際上我正在嘗試以下情況:

博客控制器:

  public function index(Request $request){
          $artigos = Artigo::where('publicado_em', '<=', Carbon::now())
            ->orderBy('publicado_em', 'desc')
            ->paginate(config('blog.artigos_por_pagina'));


        if ($request->ajax()) {
            return Response::json(view('Blog.artigos', compact('artigos'))->render());
        }
        return view('Blog.index', compact('artigos'));
    }

路由文件

post('/', 'BlogController@index');
get('/', 'BlogController@index');
get('/{slug}', 'BlogController@show');

查詢

$(document).on('ready',function(){
$('.pager a').on('click', function (e) {
var page = $(this).attr('href').split('page=')[1];
         e.preventDefault();
            $.ajax({
          type: "POST",
          url: 'page=' + page,
         dataType: 'json',
         success:function(json){

             alert("Success"+json);
         },
         error:function(){
             alert("Error");
         }      
      });
    });
});

剛剛找到解決方案,將我的 jquery 代碼更改為:

$(document).on('ready',function(){
$('.pager a').on('click', function (e) {
          var page = $(this).attr('href').split('page=')[1];
          e.preventDefault();
          var url = '?page=' + page; 
$.post( url, function(data) {
        alert( "success"+data );
      })
        .done(function() {
          alert( "second success" );
        })
        .fail(function() {
          alert( "error" );
        })
        .always(function() {
          alert( "finished" );
      });

並在我的 BlogController 中發現了一個錯誤:

 if ($request->ajax()) {
 return Response::json(view('Blog.artigos', compact('artigos'))->render());
    }

Facade Response 沒有聲明,所以剛剛添加

Use Request;

在頂部,

但我仍然不明白為什么 $ajax() 不起作用,只是 $get 和 $post

Laravel 使用CSRF令牌保護您的應用程序。 在使用 Ajax 時,您需要確保通過CSRF令牌發送,否則 Laravel 將不會處理請求以保護您的應用程序。

$.ajax({
    url: 'test',
    type: "post",
    data: {'_token': $('input[name=_token]').val()},
    success: function (data) {
        alert('the joys'); 
    },
    complete: function (data) {

    }
});

注意$('input[name=_token]').val() - 它將發送您的CSRF令牌。 您當然需要在您的視圖中使用CSRF令牌創建一個隱藏的輸入。

更多信息可以在這里找到!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM