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;
                ));
}
Mason Ha viết 13:26 ngày 01/10/2018

Edit:

headers: {
X-CSRF-TOKEN’: $(‘meta[name="_token"]’).attr(‘content’)
}

to:

headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}

You miss '

NguyenAnh viết 13:26 ngày 01/10/2018

Sorry mình cop thiếu dấu ’ đó. Trong project vẫn đủ. Ko phải do bug này đâu bạn.

Mason Ha viết 13:13 ngày 01/10/2018

Bạn có thể show Request của laravel lên?

NguyenAnh viết 13:11 ngày 01/10/2018

Mình post lại phía trên rồi đó bạn.

Ngô Quang Dương viết 13:20 ngày 01/10/2018

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.

Le Xuan Duy viết 13:11 ngày 01/10/2018

Bạn thừa dấu ; trong array kìa

return response()->json(array(
“str_html_a” => $str_html_a, “str_html_b” => $str_html_b, “str_html_c” => $str_html_c;
));

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

return [
“str_html_a” => $str_html_a,
“str_html_b” => $str_html_b,
“str_html_c” => $str_html_c,
];

NguyenAnh viết 13:19 ngày 01/10/2018

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.

NguyenAnh viết 13:14 ngày 01/10/2018

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ề.

Mason Ha viết 13:18 ngày 01/10/2018

Bạn show Request của trình duyệt trong phần netword lên mọi người xem qua.

Le Xuan Duy viết 13:17 ngày 01/10/2018

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é?

Ice Tea viết 13:11 ngày 01/10/2018
  • Mở console log xem có lỗi gì không? Có lỗi thì xem log server.
  • Bạn viết trong đoạn nào của file blade, xem console network xem cái ajax nó đã chạy chưa, status là gì 200 hay 500…? Show cái file blade lên đây 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.
  • Đoạn alert("fail" + ' ' + this.data) không dùng this.
Kevin Dang viết 13:18 ngày 01/10/2018

mở console của google chrome lên xem báo lỗi gì

Bài liên quan
0