我是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();
}
答案 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);
答案 3 :(得分:-1)
试试这个
return json_encode(array('value' => $o_response->values,'timestamp' => $o_response->created_at));