Подтвердить что ты не робот

Jquery ajax error { "readyState": 0, "responseText": "," status ": 0," statusText ":" error"}

Я пытаюсь выполнить запрос ajax

$.ajax({
  type: "post",
  url: "download.php",
  error: function(data, status, err){
           alert(JSON.stringify(data));
         },
  data: "fileid="+fileid
});

этот запрос предупреждает "{" readyState ": 0," responseText ":" "," status ": 0," statusText ":" error "}"

Я искал в google все, что я придумал, это ajax-перекрестный сайт (что явно не так)

Я попытался ввести полный URL-адрес, и он делает то же самое.

Единственное, что я могу представить, это заголовок, и я не знаю, что с ним было бы ошибкой. Вот заголовок запроса от firebug

Host                www.mydomain.com
User-Agent          Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept              */*
Accept-Language     en-us,en;q=0.5
Accept-Encoding     gzip, deflate
Accept-Charset      ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection          keep-alive
Content-Type        application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer             http://www.mydomain.com/
Content-Length      8
Cookie              PHPSESSID=27b7d3890b82345a4fc9604808acd928

Я добавил еще один запрос на другую страницу, и он работает нормально, но этот продолжает игнорировать заголовок для другого запроса:

Host                www.mydomain.com
User-Agent          Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept              text/plain, */*; q=0.01
Accept-Language     en-us,en;q=0.5
Accept-Encoding     gzip, deflate
Accept-Charset      ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection          keep-alive
Content-Type        application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer             http://www.mydomain.com/differentpage.php
Content-Length      33
Cookie              PHPSESSID=27b7d3890b82345a4fc9604808acd928
4b9b3361

Ответ 1

Я столкнулся с одной и той же проблемой: как регистрироваться каждый раз, когда пользователь щелкает ссылку.

Проблема заключается в том, что если вы не остановите всплывающее окно, запрос ajax не завершится, и вы получите readyState: 0!

Я сделал еще одну версию выше, что, возможно, более читаемо (даже если более подробный)

/*  --------------------------------------------------------------------------
 *  Before that add 'downloads' class to every anchor tag (link) in your page
 *  This script does the rest
 *  
 *  remember to change 'your_php_file' with the one you use
 *  -------------------------------------------------------------------------- */

$(document).ready( function()
{

    // Check if there is any link with class 'downloads'
    if ( typeof $('.downloads') != 'undefined' )
    {
        var links = $('.downloads');

        // Run this for every download link
        for ( var i = 0; i < links.length; i++ )
        {   
            // Set click behaviour
            links[i].onclick = function(e)
            {
                // Get download name
                var attr = this.attributes,
                    href = attr.href.textContent,
                    elem = href.split('/'),
                    elem = elem[elem.length - 1];

                // Send the download file name and only after completing the request let the user download the file
                $.ajax(
                {
                    type : "POST",
                    dataType : "text",
                    // 'your_php_file' must be an ABSOLUT or RELATIVE path!
                    url: your_php_file,
                    // 'elem' is a variable containing the download name
                    // you can call it in your php file through $_POST['download_name']
                    data: { download_name: elem },
                    // here we go magic:
                    // after the request is done run the popup for the download
                    complete: function()
                    {
                        window.location.href = href;
                    }
                });

                // Stop default behaviour until ajax request has been done
                e.preventDefault();
            };
        }
    }
});

Ответ 2

Элемент, который вызывал это, был тегом привязки, который вызывал бы это, а затем загружал exe файл, и при появлении диалогового окна загрузки файла он отменил бы этот запрос, как если бы он переходил на новую страницу.

Я изменил его на

function download(fileid, href)
{
    $.post("download.php", {task: "download", fileid: fileid}, function(data){
        window.location.href = href;
    });
}

<a onclick="download(1, file.exe);return false;" href="file.exe">Download</a>

Ответ 3

Я получал ту же ошибку:

"readyState: 0"
"responseText: undefined"
"status: 0"
"text status: error"
"error: "

В моем случае один браузер Firefox отлично работает, а другой браузер Firefox с той же версией давал мне эту ошибку, даже не делая вызов ajax.

Решение заключалось в отключении надстройки Adblocker в моем браузере.

Ответ 4

Я только что потратил впустую 3 часа своего времени, пока не узнал, что заставило ajax терпеть неудачу с readyState: 0 в моем случае.

Проблема связана с использованием кэша приложений. В файле манифеста я отсутствовал

Network: *

Это предотвратило загрузку запрашиваемой страницы без значимого сообщения об ошибке. Несмотря на то, что это не может быть причиной отказа аякса в большинстве случаев, я надеюсь, что он спасет, по крайней мере, некоторых людей, которые совершили ту же ошибку.