【问题标题】:laravel 4 paginate get function return jsonlaravel 4 分页获取函数返回 json
【发布时间】:2014-05-24 02:18:24
【问题描述】:

如果有具有此索引功能的控制器:

public function getIndex() {
    return View::make('web.index')
        ->with('projects', Project::orderBy('id', 'DESC')->paginate(8));
}

在我看来有foreach循环

@foreach($projects as $project)
<a href="like/{{$project->id}}" class="action like {{$liked}}">
  {{$project->likes}}
</a>
@endforeach
<div class="pagination">
  {{$projects->links()}}
</div>

getLike 函数:

public function getLike($id) {
    if(Cookie::get('like_'.$id) != 'true')
    {
        $project = Project::find($id);
        $project->increment('likes');
        $cookie = Cookie::forever('like_'.$id, 'true');
        $s = array(
            'status' => 'success'
        );

        $response = Response::json($s);
        $response->headers->setCookie($cookie);
        return $response;
    }
    $response = array(
        'status' => 'error'
    );
    return Response::json( $response );
}

Ajax 请求:

$(".like").on("click", function(){
    $.get(
        $( this ).prop( 'href' ),
        {
        },
        function( data ) {

            if(data['status'] == 'error')
            {
                alert("Already Liked");
            }
            else {
                alert('Like');
            }
        },
        'json'
    );
    return false;
});

在第一页中,getLike() 函数完美运行!(我使用 ajax 收集数据),但是当第 2 页重新加载(我使用无限滚动)时,getLike 函数返回带有 json 文本的空白页。 帮助...

【问题讨论】:

  • 您是否启用了错误报告和显示错误? AJAX 请求(浏览器控制台)返回什么?检查您的 ajax 请求的响应状态。
  • @Rolice 是的,在我的 app.php 中我设置了 'debug' => true,这是 Ajax 请求:$(".like").on("click", function(){ $ .get( $( this ).prop( 'href' ), { }, function( data ) { if(data['status'] == 'error') { alert("Already Liked"); } else { alert ('喜欢'); } }, 'json' ); return false; });
  • 响应状态呢?
  • @Rolice 在带有 json 数据的空白页中我得到的状态是:{"status":"success"} 数据库增量工作,但为什么我得到空白页?
  • 听起来像一个严重错误。空白页可能意味着 laravel 无法处理它。据我了解,ajax 工作正常。放入您的控制器文件,靠近第一行(在类定义之前):error_reporting(E_ALL); ini_set('display_errors', 'yes'); - 不要忘记稍后将其删除。如果有报告,请粘贴到此处。

标签: php json laravel laravel-4 pagination


【解决方案1】:

这种方法有几个问题。

  1. 您发出 GET 请求来点赞。我建议去学习 REST 原则。
  2. 您对 PHP 进行 JS ajax 调用以设置 cookie。我不是 JS 专家,但您可以将喜欢的内容存储在 LocalStorage 中,也可以直接从 JS 中设置 cookie。无需为相同的功能创建 PHP 端点。
  3. 如果您确实编写 PHP,请使用:return Response::json($data)-&gt;withCookie($cookie)

更多关于 Laravel 中 Cookie 的信息:http://laravel.com/docs/requests#cookies

【讨论】:

  • 另外,我可能错了,但是使用 jQuery 的 prop 方法来获取 href 属性也不正确 - 它应该是 attr。至少根据我可以看到的prop 上的文档和示例。
  • @hannesvdvreken 此应用程序将仅用于共享相同 IP 的服务器计算机,这就是我使用 cookie 的原因。如果不是 GET 请求,你会如何做 Like 动作?(我还需要编写 php 来更新数据库中的 Like 计数器)
  • 所以你正在服务器上做一些事情来保持喜欢的状态。那挺好的。但是不要检查cookies,检查数据库。否则当用户更换浏览器时,他的喜欢就会消失。执行 POST 或 PUT 操作会更好地遵循 Web 开发标准。
猜你喜欢
  • 2014-08-15
  • 2014-03-08
  • 2016-03-16
  • 2021-09-10
  • 2021-01-24
  • 2014-03-13
  • 2017-05-03
  • 2014-09-04
  • 1970-01-01
相关资源
最近更新 更多