NS_Binding_Aborted ошибка для функции ajax
У меня есть ссылка, при нажатии которой запрос должен поступить на веб-сервер, и при успешном выполнении должно произойти перенаправление. Я использовал AJAX для этого, но я получаю сообщение об ошибке NS_Binding_Aborted в HTTpFox. Код:
<a id="lnkredirect" href="javascript:void(0);" onclick="myfunction();">Some text</a>
Код Ajax:
function myfunction(){
$.ajax({
url: Web server Url,
type: 'POST',
datatype: 'JSON',
timeout: 20000,
data: null,
success: function{ $("#lnkredirect").attr('href','redirection link...');},
error : function{ $("#lnkredirect").attr('href','redirection link...');}
)};
return true;
}
Перенаправление происходит, но я получаю ошибку NS_Binding_Aborted в Firefox. Как в случае успеха, так и в случае ошибки перенаправление должно произойти, но почему идет NS_Binding_Aborted, я не уверен в этом. Ошибка NS_Binding_Aborted должна возникать только в том случае, если одно событие отменяет какое-либо предыдущее запущенное событие, но я уже подавил href ссылки и перенаправил ее после выполнения запроса ajax, поэтому должен быть только один вызов сервера, и NS_Binding_Aborted не должен прийти. Пожалуйста, дайте мне знать, где я иду не так?
4 ответа
У меня возникла аналогичная проблема, также при использовании как href, так и XmlHttpRequest внутри onclick. Мой XMLHttpRequest был прерван (ns_binding_aborted) и, таким образом, так и не достиг статуса 200. Я также мог видеть, что мой XHR был «заблокирован инструментами разработчика» в консоли Firefox.
Это произошло потому, что страница была перезагружена (с помощью href) до того, как она смогла завершить свою работу (что было в onclick).
У меня было примерно так:
<script type="text/javascript">
function incrementNumberOfDownloads() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) { // 4 = request ended, 200 = success
//update displayed number of downloads
document.getElementById("numberOfDownloads").innerHTML = this.responseText;
}
};
xhttp.open("GET", "incrementNumberOfDownloads.php", true);
xhttp.send();
return true;
}
</script>
<p id="numberOfDownloads">42</p>
<a href="files/myFileToDownload.zip" onclick="return incrementNumberOfDownloads();">Download my file !</a>
Я исправил проблему, добавив target="_blank" к моей ссылке для загрузки, чтобы страница больше не перезагружалась при нажатии, что позволило XMLHttpRequest завершиться успешно.
Это вызвано другим запросом, который отменяет ваш запрос. Обычно, когда ваша цель - перезагрузить данные на всех страницах, просто завершите запрос, а нет - синхронизированный запрос, небольшая ошибка новеллы.
В этом случае "обратное" предложение является проблемой, возвращаемое предложение должно быть в успешной последовательности.
Моя проблема исправлена, когда я изменил вызов события отправки нативной формы js на событие отправки jQuery.
// this code
form[0].dispatchEvent(new Event("submit"));
// changed to
form.submit();
В моем случае один из моих вызовов ajax завершился TIMEOUT до того, как страница была полностью сгенерирована.
function ajax_fct(){
$.ajax({
type: "POST",
url: "www.stackoverflow.com",
beforeSend:function(){
//
},
success: function(data){
//
},
error: function (xhr, ajaxOptions, thrownError) {
//
},
timeout: 3000 // <-- value to add / increase
});
}
Я увеличил тайм-аут, предоставив серверу время для генерации ответа ajax. Давайте проясним: это не очень хорошая практика, но она поможет вам отладить и оптимизировать ваши вычисления.