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. Давайте проясним: это не очень хорошая практика, но она поможет вам отладить и оптимизировать ваши вычисления.

Другие вопросы по тегам