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;
                ));
}

Edit:

to:

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

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

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,
];

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

  • 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.
2 Likes

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?