2015-10-08 2 views
2

Я пытаюсь сделать разбиение на страницы с помощью AJAX и Laravel 5, но я не могу сделать Ajax работает даже с простыми тестами:Ajax Pagination Laravel 5,1

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

, но только с предупреждением об ошибке, на самом деле я пытаюсь с этим следующих случаях:

BlogController:

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('/', '[email protected]'); 
get('/', '[email protected]'); 
get('/{slug}', '[email protected]'); 

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"); 
     }  
     }); 
    }); 
}); 
+0

, какая часть не работает ?? –

+1

Удалите часть 'dd ($ artigos);'. Вы не получите правильную строку json, поэтому javascript не сможет с ней работать. – mimo

+0

@mimo the dd ($ artigos) был просто испытанием, и я забыл его снять, так что да, без него все еще не работает. –

ответ

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

фасаду Response не было объявлено, поэтому просто добавлено

Use Request; 

в верхней части,

, но я до сих пор не понимаю, почему $ Аякса() работа доцент, только $ получить и $ отправлять

0

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!

+0

Да, я пробовал это, но у меня нет формы отправки, так что это не проблема, я решил это уже, опубликует решение сейчас, просто ошибка в BlogController. –