【问题标题】:Ajax Pagination Laravel 5.1Ajax 分页 Laravel 5.1
【发布时间】:2016-01-05 14:57:10
【问题描述】:

我正在尝试使用 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'));
    }

routes.php

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

jquery

$(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");
         }      
      });
    });
});

【问题讨论】:

  • 哪个部分不工作??
  • 删除dd($artigos); 部分。您不会收到有效的 json 字符串,因此 javascript 无法使用它。
  • @mimo dd($artigos) 只是一个测试,我忘了把它取下来,所以是的,没有它仍然无法工作。
  • @NiranjanNRaju 第一部分只是使用 testeserver.php 和 ajax get 进行的测试,但是有效,而我要做的是在第二部分中,使用 ajax 进行分页但我仍然尝试使用 ajax 剂量工作

标签: php jquery ajax laravel pagination


【解决方案1】:

刚刚找到解决办法,把我的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

【讨论】:

    【解决方案2】:

    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 标记创建一个隐藏输入。

    More information can be found here!

    【讨论】:

    • 是的,我试过了,但我没有提交表单,所以这不是问题,我已经解决了,现在将发布解决方案,只是 BlogController 中的一个错误。
    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2016-11-30
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多