Wypróbuj ten kod, aby uważać i zgłaszać możliwe net::ERR_INSECURE_RESPONSE
Miałem również ten problem, używając samopodpisanego certyfikatu, którego postanowiłem nie zapisywać w Ustawieniach Chrome. Po uzyskaniu dostępu do domeny https i zaakceptowaniu certyfikatu wywołanie ajax działa poprawnie. Ale gdy upłynie limit czasu akceptacji lub zanim zostanie ona zaakceptowana, jQuery.ajax()
wywołanie nie powiedzie się po cichu: timeout
parametr nie wydaje się pomocny, a error()
funkcja nigdy nie zostaje wywołana.
Jako taki, mój kod nigdy nie odbiera success()
ani error()
połączenia, i dlatego się zawiesza. Uważam, że jest to błąd w obsłudze tego błędu przez jquery. Moim rozwiązaniem jest wymuszenie error()
połączenia po upływie określonego czasu.
Ten kod zakłada wywołanie jquery ajax formularza jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional})
.
Uwaga: Prawdopodobnie będziesz chciał zmienić funkcję w setTimeout
celu najlepszej integracji z interfejsem użytkownika: zamiast wywoływania 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);
}