Lỗi khi gọi AJAX trên HOST

Em có viết một WEB bằng ASP.NET.

Đầu tiên em viết một bảng đăng nhập:


loginimg

Sau khi bấm nút Đăng nhập thì em lấy giá trị username, password, ô nhớ mật khẩu và gửi qua ajax.

Đây là action Login của Homecontroller, trả về JSON:

Em đã thử trên localhost thì hoạt động bình thường nhưng khi up lên host thì lại bị báo lỗi này:

Rất mong được các anh giải đáp, xin cảm ơn

Không có source code và thông báo lỗi đầy đủ thì cũng khó xác định lý do. Tuy vậy, tôi nghĩ rằng lỗi là do bạn sử dụng URL tuyệt đối (absolute URL) khi sử dụng AJAX call: bạn dùng đường dẫn là /Home/Login. Khi bạn sử dụng trên máy của bạn thì không có domain name nên đường dẫn này đúng. Nhưng khi bạn đưa lên server với domain name là hoclambanhdanang.com thì đường dẫn tuyệt đối này không còn đúng nữa nên đoạn mã AJAX không tìm thấy URL này để gởi dữ liệu đến server và trả về lỗi 500.

Để khắc phục, bạn có thể đổi sang đường dẫn tương đối (relative URL) trong đoạn mã JS để dùng AJAX như sau: url : "../Home/Login", và thử lại nhé.

4 Likes

Có 3 dạng đường dẫn:

Tương đối:

"x.png", "path/to/x.png", "../../path/to/x.png"...

Tuyệt đối:

"D:/path/to/x.png", "localhost/x.png", "http://my.site/x.png"...

Base

"/", "/x.png", "/path/to/x.png"

Giả sử web của bạn đang ở địa chỉ “http://my.site/path/to/defalt.aspx” chẳng hạn, thì “/” tương đương với “http://my.site/
Trừ khi set trong code của bạn có đoạn set lại base URL hoặc đã đăng ký domain với ISP và xài domain đó đúng cách, nói chung không nên dùng base path, vì khó mà biết được cái hosting service sẽ đặt website của bạn ở domain nào. Cái nào không thuộc về mình thì xài absolute path, còn cái gì thuộc về mình, deploy trong thư mục web của mình thì xài relative path như cách của @thaipt là cách mình thích nhất.

4 Likes

Mình đã thử thay đổi đường dẫn như bạn nói nhưng vẫn bị.
Cho mọi người thêm một vài hình ảnh thông báo lỗi trên chrome:


Form Data toàn rỗng thế kia?
Hình như bạn gửi dạng json, nhưng trên máy chủ lại xử lý theo application/x-www-form-urlencoded/multipart/form-data.

Bạn thử bao phương thức Login() bằng try - catch và trả về thông báo của ngoại lệ thử xem.


Mình thử vào trực tiếp https://hoclambanhdanang.com/Home/Login thì phải chờ tải khoảng 5 - 7 giây sau đó nhận được thông báo:

4 Likes

Đường dẫn trong ví dụ của tôi chỉ hoạt động đúng với cấu trúc thư mục mặc định do Visual Studio tạo ra cho các ứng dụng ASP.NET MVC. Tùy theo cách bạn tạo và sắp xếp các thư mục trong project của bạn, bạn phải thử các đường dẫn khác cho phù hợp.

1 Like

Mình đã tìm ra một cách sửa lỗi, do cấu hình bên phía server.
Cảm ơn những lời góp ý của mọi người.

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