01/10/2018, 11:10
Ajax không hoạt động trong page blade Laravel 5.4
Mình có sử dụng ajax trong page blade nhưng ko request được lên controller qua router. Mình thử tạo 1 page thuần thì request được bình thường. Đây là code của mình. Bạn nào biết support mình với. Mình cảm ơn!
$("#btn_click").click(function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
var formData = {
name: "abc",
start_date: "2017-08-18",
end_date: "2017-08-23"
};
$.ajax({
type: 'POST',
url: '/test_detail',
data: formData,
async: true,
success: function (data) {
alert('success' + ' ' + data['str_html']);
},
error: function (data) {
alert("fail" + ' ' + this.data)
}
});
});
Route::post('/test_detail', 'TestController@getDataByDate')->middleware('auth');
public function getDataByDate(Request $request)
{
.......
return response()->json(array(
"str_html_a" => $str_html_a, "str_html_b" => $str_html_b, "str_html_c" => $str_html_c;
));
}
Bài liên quan
Edit:
to:
You miss
'
Sorry mình cop thiếu dấu ’ đó. Trong project vẫn đủ. Ko phải do bug này đâu bạn.
Bạn có thể show Request của laravel lên?
Mình post lại phía trên rồi đó bạn.
Theo như code thì PHP của bạn trả về kết quả dạng JSON.
Như vậy khi trả về cho AJAX, để dùng được nó bạn phải dùng JSON.parse(kết quả trả về) để nó giải mã JSON thì mới lấy ra được.
Bạn thừa dấu ; trong array kìa
Laravel 5.4 khi bạn return nó đã tự động convert mảng trả về sang dạng Json rồi nhé nên bạn chỉ cần
https://laravel.com/docs/5.4/responses
Mình thử với trường hợp page thuần rồi, get data json từ js chỉ cần data[‘key’]. Chỉ trường hợp dùng page blade template thì ko request được vào controller.
Ko phải lỗi này đâu bạn. Mình thử rồi, phần code trên controller ko có vđề. Do phía js ajax ko call vào đc trong controller nên ko có dữ liệu trả về.
Bạn show Request của trình duyệt trong phần netword lên mọi người xem qua.
Bạn thay type: ‘POST’ thành _method: ‘POST’ xem
Hoặc bạn dùng post man post thằng request tới test_detail xem kết quả trả về là gì nhé?
Vài lưu ý:
$.ajaxSetup
chỉ cần chạy 1 lần, ko cần chạy lại mỗi lần click.alert("fail" + ' ' + this.data)
không dùngthis.
mở console của google chrome lên xem báo lỗi gì