Hãy thử mã này để xem và báo cáo, có thể net::ERR_INSECURE_RESPONSE
Tôi cũng gặp vấn đề này khi sử dụng chứng chỉ tự ký mà tôi đã chọn không lưu vào Cài đặt Chrome. Sau khi truy cập tên miền https và chấp nhận chứng chỉ, cuộc gọi ajax hoạt động tốt. Nhưng một khi sự chấp nhận đó đã hết thời gian hoặc trước khi nó được chấp nhận lần đầu tiên, jQuery.ajax()
cuộc gọi sẽ thất bại một cách im lặng: timeout
tham số dường như không có ích và error()
chức năng không bao giờ được gọi.
Như vậy, mã của tôi không bao giờ nhận được một cuộc gọi success()
hoặc error()
do đó bị treo. Tôi tin rằng đây là một lỗi trong việc xử lý lỗi này của jquery. Giải pháp của tôi là buộc error()
cuộc gọi sau khi hết thời gian chỉ định.
Mã này không giả sử một cuộc gọi ajax jquery của mẫu jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional})
.
Lưu ý: Bạn có thể muốn thay đổi chức năng trong setTimeout
để tích hợp tốt nhất với giao diện người dùng của mình: thay vì gọi điện alert()
.
const MS_FOR_HTTPS_FAILURE = 5000;
$.orig_ajax = $.ajax;
$.ajax = function(params)
{
var complete = false;
var success = params.success;
var error = params.error;
params.success = function() {
if(!complete) {
complete = true;
if(success) success.apply(this,arguments);
}
}
params.error = function() {
if(!complete) {
complete = true;
if(error) error.apply(this,arguments);
}
}
setTimeout(function() {
if(!complete) {
complete = true;
alert("Please ensure your self-signed HTTPS certificate has been accepted. "
+ params.url);
if(params.error)
params.error( {},
"Connection failure",
"Timed out while waiting to connect to remote resource. " +
"Possibly could not authenticate HTTPS certificate." );
}
}, MS_FOR_HTTPS_FAILURE);
$.orig_ajax(params);
}