从PHP转换为JSON文件

时间:2017-01-02 13:51:48

标签: javascript php json laravel

我是Laravel学习者。我现在要学习的是将一个JSON文件从后端发送到前端,这样我就可以使用这个JSON文件来绘制图形。

在我的模型中,我编写了一个函数,它将提取值和时间戳created_at。这是一段代码,它将返回与单个网站和时间戳关联的Google页面速​​度值。然后我想使用JS绘制图表,其中垂直值是Google页面速​​度和水平是时间戳created at

任何可以帮助我的人?我是否需要将返回值更改为数组?

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Notification;
use App\Status;

class ChartController extends Controller
{

     public  function speedHistory(){

        $o_status = Status::where('name','speed')->first();
        $o_response = $this->statuses()->where('status_id', $o_status->id)
        ->select('values AS value', 'created_at AS timestamp')->orderBy('created_at','DESC')->get();


        if($o_response){
            return response()->json($o_response);
        }
            // return an empty json array instead of false
            //return false;
        return response()->json(array());
    }
}

并且路线是

路线::得到(' JSON',' ChartController @ speedHistory&#39);

一直在抱怨没有定义方法。这是我的模特 lass通知扩展了Model {     protected $ fillable = [' id',' website_url',' email',' slack_channel',' check_frequency', ' alert_frequency'' speed_frequency''有源'];

public function statuses(){
    return $this->belongsToMany('App\Status')->withPivot('values')->withTimestamps();
}

4 个答案:

答案 0 :(得分:0)

要改进我的回答,您需要返回' response() - > json()'这会将内容类型更改为json,从而使响应成为所谓的" JSON文件"。

你能试试吗?我认为你试图从一个不应该工作的集合中获取值和created_at。我假设您使用L5,请参阅Danis Abols的评论。

$(document).ready(function(){
  $(".hero").slick({
    slidesToShow: 1,
    slidesToScroll: 1,
    dots: true,
    autoplay: true,
    autoplaySpeed: 5000,
    arrows: false
  });
});    

更新:根据op

的评论添加了Notification ::

答案 1 :(得分:0)

在你的功能中:

public function speedHistory(){

 try{ 

       $o_speed = Status::where('name','speed')->first();
       $o_response = $this->statuses()->where('status_id', $o_status->id)
    ->select('values', 'created_at')->orderBy('created_at','DESC')->get();

       if($o_response === null)
//You can use this to go in catch: "throw new Exception();" or "return false" if you want
              throw new Exception();

      // Returns a json to be consumed in ajax
      return response()->json(['status' => 1, 'code' => 200, 'message' => 'Your message', 'value' => $o_response->values, 'timestamp' => $o_response->created_at], 200);
    }catch(\Exception $e){
      return response()->json(['status' => 0, 'code' => 400, 'message' => $e->getMessage()], 400);
    }

在你的ajax中,你会这样消费:

var request = $.ajax({
// Here's your route of speedHistory
  url: "YOUR_ROUTE",
  type: "GET",
  dataType: "json"
});

request.done(function(response) {
    if(response.status == '1'){
         $("#youDiv").html(response.value + ' - ' + response.timestamp);
     }
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

答案 2 :(得分:0)

您可以在json()上使用response()方法。

  

json方法会自动将Content-Type标头设置为application/json,并使用json_encode PHP函数将给定数组转换为JSON:

$array = ['data'];
return response()->json($array);

Laravel Documentation (json-response)

答案 3 :(得分:-1)

试试这个

return json_encode(array('value' => $o_response->values,'timestamp' => $o_response->created_at));